二分查找

一、二分查找核心思想:
  定中位,得中值。
  中值和查找词比较
  查找词大于中值,在右边再次递归查找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;
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值