前提 有序数组:
可以利用 Arrays.sort(arr) 实现数组有序
思 路:
1. 数据得有序Arrays.sort(arr)
2. 定义最小索引 int min=0 和最大索引 int max=arr.length-1
3. 当 最小索引 < = 最大索引 时,通过while循环
3.1 定义中间索引 int mid=(max-min)/2+min;
3.2 通过 if 条件判断 arr[mid] 和 给定数字 x 的大小,
3.2.1 如果 arr[mid] == x ,return mid ;
3.2.2 如果 x > arr[mid] , 向右查,min=mid+1;
3.2.3 如果 x < arr[mid] , 向左查,max =mid-1;
4. 如果在数组中没有找到这个x,则 return -1;
/**
* @param arr 数组
* @param x 要查询的数字
* @return 数字在数组中的索引 (没有查到则返回-1)
*/
private static int binarySearch(int []arr,int x){
//1.分别定义 最小、最大和中间的索引位置
int min=0;
int max=arr.length-1;
//2.当low<=high时,循环将 arr[mid]和a 大小比较
while (min<=max){
int mid=(max-min)/2+min; //中间位置 mid=(high+min)/2=high/2+min/2-min/2+min/2=(high-min)/2+min
if (arr[mid]==x){
return mid;
}else if(x>arr[mid]){ //向右查找
min=mid+1;
}else { //向左查找
max=mid-1;
}
}
return -1;
}