二分法检索(binary search)又称折半检索。
为什么要使用二分查找呢?
通常我们比较的话是一个一个的去比较,如果运气好,那么第一次就找到了, 如果运气不好数据量也很大, 那么就需要浪费很多的时间, 如果是二分查找的话, 每次查找我们可以折半寻找, 第一次找不到就判断比中间数大还是小, 然后再次折半...再次折半, 直到找到, 这样子的话我们就可以提高我们的查找效率
二分查找的思想
注意: 二分查找前需要排序好数组 !!!
比如数组 [5,10,20,40,80,150,600,700,960] 中要查找10这个元素
1. 我们要从这个数组里面找到中间数, 现在中间数是 80
2. 那么10跟80 比较一下, 如果比 80 小,那么就往左边找, 否则从右边找
3. 现在从80左边的数组里面找[5,10,20,40,80] 找到中间数 20
4.重复2步骤用10与20比较
5. 重复以上步骤, 如果找到最后两个元素不能再折半了, 那么就逐个进行比较.
public static int binarySearch(int[ ] array, int value){
int low = 0;
int high = array.length - 1;
while(low <= high){
int middle = (low + high) / 2;
if(value == array[middle]){
return middle; //返回查询到的索引位置
}
if(value > array[middle]){
low = middle + 1;
}
if(value < array[middle]){
high = middle - 1;
}
}
return -1; //上面循环完毕,说明未找到,返回-1
}