二分法一般有两种实现方式
第一种
public static int binarySort(int[] array, int key) {
int low = 0;
int high = array.length - 1;
while (low <= high) {//这里要有等号!
int mid = (low + high) >>> 1;
if (key < array[mid]) {
high = mid - 1;//小于中间值说明,要在array[mid]的左边找
} else if (key > array[mid]) {大于中间值说明,要在array[mid]的右边找
low = mid + 1;
} else {
return mid;
}
}
return -1;
}
public static int binarySortRecursion(int[] array, int key, int low, int high) {
if (low <= high) {
int mid = (low + high) >>> 1;//递归首先要考虑满足条件退出的情况
if (key < array[mid]) {
return binarySortRecursion(array, key, low, mid - 1);
} else if (key > array[mid]) {
return binarySortRecursion(array, key, mid + 1, high);
} else {
return mid;
}
}
return -1;
}
递归的方法和前面是同理。二分法很好理解。