1,.非递归
//二分查找非递归,from JDK1.7 Arrays.binarySort()
public static int binarySearch(int[] a, int key) {
if (a == null || a.length == 0)
return -1;
int low = 0;
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
2.递归
//将递归封装起来
public static int binarySearch(int[] a, int key) {
if(a == null || a.length == 0) return -1;
return binSearch(a, 0, a.length -1, key);
}
//递归实现
private static int binSearch(int[] a, int low, int high, int key) {
int mid = (low + high) >>> 1;
if(low > high) return -(low + 1);
if(a[mid] == key) return mid;
else if(a[mid] > key)
return binSearch(a, low , mid - 1, key);
else
return binSearch(a, mid + 1, high, key);
}