原理
二分查找有一个重要的前提,那就是有序。原理可以看做一个猜数字的游戏,在给定的一个区间内,获取中间的数据 判断他和猜的那个数的大小关系,得到新的猜测区间,重复执行若干次后范围逐渐缩小直到猜中
二分查找不同于普通的遍历顺序查找 顺序查找在最坏的情况下需要查找N次 大大降低了效率,而二分查找的优势在数据量小的情况下可能不明显 但是数据量越大越能展现二分查找的优势
实现方法
public class ArrayDemo {
public static void main(String[] args) {
int [] nums = {1,2,3,4,5,6,7}; //二分查找的前提条件是数组有序
int formIndex = 0; //前指针
int toIndex = nums.length-1; //后指针
int key = 5; //查找的值
while(formIndex <= toIndex){
int mid = (formIndex+toIndex)>>>1; //每次查找需要用到的中间指针
if (nums[mid] == key){ //nums[mid] == key 查找成功 返回下标并退出循环
System.out.println(mid);
break;
}else if (nums[mid] > key){ // nums[mid] > key 说明查找的值在本次中间指针的左半部分
toIndex = mid-1;
}else {
formIndex = mid+1;
//只剩最后一种情况nums[mid] < key 说明查找的值在本次中间指针的右半部分
}
}
}
}