Binary Search
分治思想
public class BinarySearch {
public static int binarySearchRecursive(int[] array, int low, int high,
int key) {
// base cases
if (high < low)
return -1;
int mid = (low + high) >>> 1;
int midVal = array[mid];
if (midVal == key) {
return mid;
} else if (midVal < key) {
return binarySearchRecursive(array, mid + 1, high, key);
} else {
return binarySearchRecursive(array, low, mid - 1, key);
}
}
public static int binarySearchIt(int[] array, int low, int high, int key) {
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = array[mid];
if (midVal == key)
return mid;
else if (midVal < key)
low = mid + 1;
else
high = mid - 1;
}
return -low;// key not found
}
public static void main(String[] args) {
int[] a = { 12, 6, 8, 3, 16, 22, 9, 14, 2, 17 };
InsertSort.insertSort(a, a.length);
System.out.println(Arrays.binarySearch(a, 16));
System.out.println(binarySearchIt(a, 0, a.length, 16));
System.out.println(binarySearchRecursive(a, 0, a.length, 16));
}
}