折半查找递归算法_常用查找算法之(二)----折半查找

折半查找----又称为二分查找,这种查找方法需要待查的查找表满足两个条件:首先,查找表必须使用顺序存储结构;其次,查找表必须按关键字大小有序排列。

下面通过一个实际的例子来分析折半查找算法的执行步骤。假设有如下经过排序的数据:3 、12 、31 、42 、54 、59 、69 、77 、90 、97 。待查找关键字为42 。在折半查找过程如下:

(1) 取中间数据项mid 与待查找关键字42 对比, mid 项的值大千42 。因此, 42 应该在数据的前半部分。

(2) 取前半部分的中间数据项mid 与待查找关键字42 对比, mid 项的值小于42 。因此,42 应该在数据的后半部分。

(3) 取后半部分的中间数据项mid 与待查找关键字42 对比, mid 项的值小于42 。因此,42 应该在数据的后半部分。

(4) 最后数据仅剩一项,将其作为mid 与待查找关键字42 对比,正好相等,表示查找到该数据。这样,经过4 次比较便查找到42 所在的位置.

646ffb9dc7c4371e75dc28a702862360.png

以下代码展示:

private static int binarySearch(int[] arr, int key){
		if(arr == null)
			return -1;
		int len = arr.length;
		if(len == 0)
			return -1;
		//定义最小和最大索引
		int low = 0;
		int high = len -1;
		int mid = low + high >> 1;
		if(key < arr[low] || key > arr[high])
			return -1;
		
		while(high >= low){
			//三种情况
			if(arr[mid] == key){
				return mid;
			}else if(arr[mid]< key){//去右边找
				low = mid + 1;
			}else{
				high = mid -1;
			}
			//再次二分
			mid = low + high >> 1;
			counter ++;
		}
		
		return -1;
	}

在最坏的情况下,折半查找所需的比较次数为O(nlog2n),其查找效率比顺序查找法要快很多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值