二分法查找(折半查找)算法

  1. 二分法的前提是数组已经从小到大排序了,没有排序的数据是无法查找的
  2. 二分法查找效率高于"一个挨着一个"这种查找方式
  3. 二分法查找的终止条件: 一直折半,直到中间的数据就是要找到的数据为止
10(下标0) 11 12 13 14 15 16 17 18 19 20(下标10) arr数组
通过二分法查找,找出18这个元素的下标:
	(0+10) / 2 --> 中间元素下标: 5
	中间元素是: arr[5] --> 15
	15 < 18(被查找的元素)
	被查找的元素18在目前中间元素15的右边
	开始元素的下标从0变成5 + 1
再重新计算一个中间元素的下标:
	开始下标是5+1 结束下标是10
	(6 + 10) / 2 --> 8
	arr[8] -->18
	找到的中间元素正好和被罩元素18相等,表示找到了,下标为8

代码实现

/**
 * 二分法查找
 * @param arr 要查询数据所在的数组
 * @param dest 要查询的数据
 * @return 查询到的数据返回索引 未查询到返回-1
 */
public static  int binarySearch(int[] arr,int dest){
	//开始下标
	int begin = 0;
	//结束下标
	int end = arr.length -1;
	//开始查找
	//开始元素在结束元素的左边或者相等,就有机会循环
	while(begin <= end){
		//获取中间元素下标
		int mid = (begin + end) / 2;
		if(arr[mid] == dest){
			//正好找到了,返回索引
			return mid;
		}else if(arr[mid] < dest){
			//说明要查找的元素在中间元素的右边
			begin = mid + 1; 
		}else{
			//说明要查找的元素在中间元素的左边
			end = mid - 1;
		}
	}
	return -1;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值