二分查找,又叫折半查找,是一种在有序数组(以及其它线性存储结构)中查找一个元素的高效算法。最坏时间复杂度为 O(logn)
public static int binarySearch(int[] arr,int target) { int low = 0; int high = arr.length - 1; int mid=-1; while (low <= high) { mid = (high-low)/2 + low ; //使用 (low+high) /2 可能会溢出。对于java,使用 mid = (high+low)>>>1; 也可以防止溢出 if (arr[mid] < target) low = mid + 1; else if (arr[mid] > target) high = mid - 1; else //arr[mid] == target return mid; // found } return -1; // not found.
}
原文:http://www.cnblogs.com/lulipro/p/6262248.html