二分法查找 (Binary Search)
二分法查找适用于排列有序的数据。java实现方法如下:
// Find the location of a value in array a
// Array a must be sorted
// Return -1, if the value is not in a
public static int binarySearch(int value, int[] a) {
int lo = 0;
int hi = a.length -1;
int mid = lo + (hi - lo) / 2;
while(lo <= hi) {
if (value > a[mid]) lo = mid + 1;
else if (value < a[mid]) hi = mid - 1;
else return mid;
mid = lo + (hi - lo) / 2;
}
return -1;
}
有几点需要说明:
while(lo <= hi) 必须是 <= 。若缺少=,则数组的最后一个数据一定查找失败。
每次循环lo = mid + 1;hi = mid - 1;必须加上或减去-,否则可能造成死循环。
如: 当lo与hi相邻时,lo的位置为i,hi的位置为i+1,则mid = lo或hi,无法改变hi与lo的位置,陷入死循环。
posted on 2018-01-02 20:25 Deltadeblog 阅读(212) 评论(0) 收藏 举报
浙公网安备 33010602011771号