劍指offer之二分查詢
阿新 • • 發佈:2018-12-01
@(演算法)
二分查詢
歡迎關注作者部落格
簡書傳送門
思想:
又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。
程式碼:
/**
* @program:
* @description: 二分查詢
* @author: zhouzhixiang
* @create: 2018-11-06 20:08
*/
public class BinSearch {
/**
* 二分查詢普通實現
* @param array
* @param key
* @return
*/
public static int binSearch(int array[], int key){
int mid;
int start = 0;
int end = array.length - 1;
while (start < end) {
mid = (end - start)/2 + start;
if (array[mid] > key){
end = mid - 1;
} else if(array[mid] < key){
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
/**
* 二分查詢遞迴實現
* @param array
* @param key
* @return
*/
public static int binSearch2(int array[], int key, int start, int end){
int mid = (start + end) / 2;
while (start < end) {
if(array[mid] > key) return binSearch2(array,key,start,mid-1);
else if (array[mid] < key) return binSearch2(array,key,mid+1,end);
else return mid;
}
return -1;
}
}
歡迎加入Java猿社群