二分算法
非递归方式实现
public static int findTwoPoint(int[] array, int key) {
int start = 0;
int last = array.length - 1;
while (start <= last) {
int mid = (last - start) / 2 + start;//防止直接相加造成int范围溢出
if (key == array[mid]) {//查找值等于当前值,返回数组下标
return mid;
}
if (key > array[mid]) {//查找值比当前值大
start = mid + 1;
}
if (key < array[mid]) {//查找值比当前值小
last = mid - 1;
}
}
return -1;
}
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
递归方式实现
public static int search(int[] array, int key, int low, int high) {
int mid = (high - low) / 2 + low;
if (key == array[mid]) {
return key;
} else {
while (low <= high) {
if (key < array[mid]) {//查找值比当前值小
return search(array, key, low, mid - 1);
}
if (key > array[mid]) {//查找值比当前值大
return search(array, key, mid + 1, high);
}
}
}
return -1;
}

更多精彩