二分搜索算法
理論:
二分搜索算法用于針對已排序的集合進(jìn)行搜索。
它的原理是:
1, 找到排序數(shù)組的中間元素,如果它匹配目標(biāo)值,那么就返回它在數(shù)組中的索引。
2, 如果沒有找到,那么判斷中間值比目標(biāo)值大還是小,
如果中間值比目標(biāo)值大,那么就對第一個元素到middle-1的元素遞歸這個過程。
如果中間值比目標(biāo)值小,那么就對middle+1到最后一個元素。
3, 如果結(jié)束的索引小于開始的索引,返回-1,表示沒有找到。
4, 如果子集合有2個元素,那么各自比較。因為Java的整數(shù)除法會舍棄小數(shù),如果數(shù)組只有2個元素,那么middle值一直都是第一個元素。
經(jīng)過上述的遞歸過程,最終將返回匹配元素的索引,或者是-1,表示找不到。
二分搜索算法之所以速度快,是因為它每次可以把數(shù)組切分成兩半,每次遞歸調(diào)用都能去除一半數(shù)據(jù),而不用匹配每一個數(shù)據(jù)。
代碼:
下面是代碼,邏輯清楚,代碼簡單。
/**
* @param array
* @param start
* @param end 這是最后一個元素的索引,第一次調(diào)用應(yīng)該是array.length-1
* @param value
* @return
*/
public static int binarySearch(int[] array,int start,int end,int value){
int middle=(start+end)/2;
if(end
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |