一、二分查找核心思想:
定中位,得中值。
中值和查找词比较
查找词大于中值,在右边再次递归查找low变为mid+1;
查找词小于中值, 在左边再次递归查找high变为mid-1;
查找词等于中值,返回中值。
public class BinarySearch {
public static void main(String[] args) {
int[]arr=new int[10000*10000];
for(int i=0;i<arr.length;i++) {
arr[i]=i+1;
}
int target=10000*10000;
long now=System.currentTimeMillis();//系统当前时间(游戏开始时间)
int index=binarySearch(arr,0,arr.length-1,target);//开始查找元素所在下标(游戏开始)
//运行时间(游戏时间=游戏结束时间-游戏开始时间)
System.out.println(System.currentTimeMillis()-now+"ms");
System.out.println("二分查找:"+target+"所在位置为:"+index);
}
//二分查找 low-起点 high-终点 key-关键词
public static int binarySearch(int []arr,int low,int high,int key) {
//递归出口
if(low>high)
return -1;
//找出中间位,移位防止溢出也高效
//int mid=(high+low)/2;类似于以下
int mid=low+((high-low)>>1);
int midVal=arr[mid];//得出中间值
if(midVal<key) // 查找词大于中值,在右边再次递归查找low变为mid+1;
return binarySearch(arr,mid+1,high,key);
else if(midVal>key) //查找词小于中值, 在左边再次递归查找high变为mid-1;
return binarySearch(arr,low,mid-1,key);
else //查找词等于中值,返回中值。
return mid;
}
}
来源:CSDN
作者:婷婷周
链接:https://blog.csdn.net/qq_41629684/article/details/104161017