折半查找
有一个有序数组arr,先查询这个数组中间位置的数字,与要查找的数字num做对比。
设置一个左指针L,初始值为0,右指针R初始值为arr.length()-1,也就是表示要查询的数组下标的左边界和右边界
此时进行查找
1、每次查找的位置都是min=(L+R)/2
2、如果arr[mid]>num,说明num在arr的左半部分,则将R改为mid-1,此时要查找的数组范围就变成了0~mid-1
3、如果arr[mid]<num,说明num在arr的右半部分,则将L改为mid+1,此时要查找的数组范围就变成了mid+1~arr.length()-1
4、如果arr[mid]=num,则说明找到了num的所在位置,返回即可
使用新的L和R重复上述1,2,3,4操作以及判断,即可使用二分法找到num所在位置
代码如下
public static void main(String[] args) {
int[] arr={1,2,2,2,3,4,5,6,7,8,8,9};
int num=3;
int L=0;
int R=arr.length-1;
while (L<=R){
int mid=(L+R)/2;
if (arr[mid]>num) {
R=mid-1;
}else if (arr[mid]<num) {
L=mid+1;
}else {
System.out.println("num所在位置下标为"+mid);
break;
}
}
}