思想:每次都与区间的中间数据比对大小,缩小查找区间的范围。
注意:二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。
优点:比较次数少,查找速度快,平均性能好
缺点:要求待查找表为有序表,且插入删除困难
代码实现:public static int binarySearch(int[] arr, int value) {
// 最小索引
int min = 0;
// 最大索引
int max = arr.length - 1;
// 开始循环查找
while(true) {
// 获取中间索引
int mid = (min + max)/2;
// 如果arr[mid]>value,则证明在上半区
if(arr[mid] > value) {
// 更新max的值
max = mid - 1;
}
// 如果arr[mid]
else if(arr[mid]
// 更新min的值
min = mid + 1;
}
// 如果arr[mid]==value,则证明找到
else {
return mid;
}
// 如果min>max,则证明没找到该值
if(min > max) {
return -1;
}
}
}