二分查找
1.定义两个变量,表示要查找的范围,默认min = 0,max = 最大索引
2.循环查找,但是min<=max
3.计算出mid的值
4.判断mid位置的元素是否为要检查的元素,如果是直接返回对应索引
5.若要查找的元素值在mid的左边,那么min值不变,max = mid -1,继续下次循环查找
6.若要查找的元素值在mid的右边,那么max值不变,min = mid +1,继续下次循环查找
7.当min>max时,表示要查找的元素不存在,返回 -1
public class MyBinarySearchDemo {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int num = 3;
int index = binarySearchForIndex(arr,num);
}
private static int binarySearchForIndex(int[] arr, int num) {
//1.定义查找范围
int min = 0;
int max = arr.length-1;
//2.循环查找 min<=max;
while (min<=max){
//3.计算中间位置 mid
int mid =(min + max) >> 2;
if (arr[mid]>num){//mid指向的元素 > num,表示要查找的元素在左边
max = mid -1;
}else if (arr[mid]<num){//mid指向的元素 < num,表示要查找的元素在右边
min = mid +1;
}else{
return mid;//mid指向的元素 == num
}
}
return -1;//如果min大于max就表示元素不存在。
}
}