首先,說明一下二分法是怎樣的:給定的陣列是有序的,給定乙個key值,每次查詢最中間的值,如果相等,就返回對應的下標;如果key大於最中間的值,則在陣列的右半邊繼續查詢;如果小於,則在陣列的左半邊查詢。那麼最終存在兩種結果:一種是找到了並返回對應的下標,第二種就是沒有找到,返回-1。
下面舉例說明:
存在乙個陣列arr[10],假設arr[10]=,定義兩個邊界的下標low和high,以及中間下標mid,
int low=0,high=10-1,mid=(low+high)/2,在對每一步進行比較的時候,low<=high,如果要找key為56的值對應的下標,那麼第一次我們先找到中間下標mid=4。因為arr[4]=15,比當前的key值要小,則按照要求在陣列的右半部分查詢,讓low=mid+1,high值不變。接下來,我們繼續找到右半部分的中間下標mid = (5+9)/2=7,arr[7]=33,比當前的key值還小,那麼繼續向右半邊查詢,且low=mid+1,high值繼續不變。接下來,找到中間下標mid=(8+9)/2=8。這個時候arr[8]==key==56,ok,找到目標值,停止查詢,返回下標mid。
/**
*二分法查詢
*@author lyr
*@param arr 給定陣列
*@param key 要查詢的key值
*@return 返回key值在陣列中對應的下標,沒有則返回-1
*/public int binarysearch(int arr,int key)
if(arr[mid] < key)else
}return -1;
}
二分法查詢
前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...
二分法查詢
演算法 當資料量很大適宜採用該方法。採用二分法查詢時,資料需是排好序的。主要思想是 設查詢的陣列區間為data start,end 1 確定該期間的中間位置pos將查詢的值m與data pos 比較。若相等,查詢成功返回此位置 否則確定新的查詢區域,繼續二分查詢。區域確定如下 data pos m ...
二分法查詢
二分法查詢 對有序元素集合的查詢,又叫折半查詢。思路 假設公升序 將查詢元素與集合中間元素比較,相等則返回 若查詢元素小於集合中間元素,則在集合左半部分進行二分查詢 若查詢元素大於集合中間元素,則在集合右半部分進行二分查詢 首先判斷要查詢的範圍正確性,如果查詢開始位置大於結束位置則返回未找到 sf....