1.前提:需针对一个有序数组来进行查找
2.解决思路:
(1)定义最小索引和最大索引
(2)计算出中间索引
(3)拿中间索引对应的元素和要查找的元素进行比较
①如果相等:直接返回中间索引
②若不相等:
大了,左边找
小了,右边找
(4)重新获取最小索引和最大索引,计算出中间索引
(5)回到步骤 (3) 继续查找
3.图解:
例:
public class ArrayDemo {
public static void main(String[] args) {
int [] arr = {9,13,14,45,96,99};
int index = getIndex(arr,96);
System.out.println("Index:"+index);
}
public static int getIndex(int[] arr,int value){
//定义最大索引和最小索引
int max = arr.length -1 ;
int min = 0 ;
//计算中间索引
int mid = (max + min)/2 ;
//拿中间索引对应的元素和要查找的value元素进行比较
while(arr[mid] !=value){
//当前mid索引对应的元素不等于value元素,分两种情况
if(arr[mid]>value){
//重新获取最大索引
max = mid -1 ;
}else if(arr[mid]<value){
min = mid +1 ;
}
//判断:如果找不到了应该返回-1
if(min>max){
return -1 ;
}
//重新获取最大和最小索引,计算中间索引
mid = (max+min)/2 ;
}
return mid ; //如果直接相等,直接返回
}
}