二分法查找 (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的位置,陷入死循环。

原文地址:https://www.cnblogs.com/deltadeblog/p/8178992.html