二分法查找适用于排列有序的数据。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的位置,陷入死循环。