注意:必须是有序数组
本质:不断与中间值比较
public class Demo2_Array {
public static void main(String[] args) {
int[] arr= {11,22,33,44,55,66,77,88};
System.out.println(getIndex(arr,22));
}
/*
* 二分查找
* 1,返回值类型,int
* 2,参数列表int[] arr,int value
*/
public static int getIndex(int[] arr, int value) {
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while(arr[mid] != value) { //当中间值不等于要找的值,就开始循环查找
if(arr[mid] < value) { //当中间值小于了要找的值
min = mid + 1; //最小的索引改变
}else if (arr[mid] > value){ //当中间值大于了要找的值
max = mid - 1; //最大的索引改变
}
mid = (min + max) / 2; //如果找到了,则arr[mid]就是目标,返回mid即可
/**
如果不存在,即最小索引大于最大索引,返回-1
if(min > max) {
return -1;
}
*/
}
return mid; //运行完方法,找到了则返回
}
}
建议:记住这个模板,分析原理有点繁乱。