查找算法之插值查找(深入理解,详细说明)

本文深入探讨了插值查找算法,它是二分查找的一种扩展。通过选取更合适的中间值,提高查找效率,尤其适用于数据量大且关键字分布均匀的有序序列。文章通过实例和代码展示了插值查找的工作原理,指出在分布不均的情况下,其性能可能不优于二分查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回顾一下之前讲述的二分查找。其基本的思路就是找到中间值mid将序列分成两个部分,然后判断要查找的值是在左子序列还是右子序列进而继续找到中间值再分裂。可以看到,每次分裂是将原序列分成相等的两个部分,每个子序列相对于原序列所占比也就是1/2(后面提到的所占比都是这个意思)。还是拿之前的例子作比较:

思考:对于序列{5,8,34,55,66},如果想要查找‘5’这个元素,按照原先二分查找的思路,在1/2的所占比的基础上分裂,那么序列要分裂(查找)多少次呢?很明显需要2次。那么,假设我们取元素‘8’为中间值,还是查找‘5’这个元素。可以看到仅仅只需要一次比较就确定了‘5’的位置,并且此时‘5’元素的所占比为:1/5,另一部分则为3/5(去除掉了中间值)。可以看到,中间值的选取能够决定查找元素的效率,而中间值的选择跟我上面所说的“所占比”密切相关。(这里的“所占比”是我在个人理解基础上提出来的,目的是方便理解与讲述,不是规定的说法)。

做了这么多铺垫,相信你或许知道我接下来要讲什么了。没错,接下来要讲的就是在二分查找的基础上实现的扩展——插值查找(按比例查找)。

首先介绍一些插值查找的工作原理:(以下图片都是截取自韩顺平老师的数据结构与算法教学视频)视频链接
在这里插入图片描述
如上图,经过二分查找获取中间下标的算法改成的另一个算法,这里我的理解是求出要查找值key在序列总的所占比。如果你学过数值分析相信会有更好的理解。(其实,我也是只是听别人谈到了数值统计这个名词哈哈)

接下来举例说明插值查找算法1-100的数组:
在这里插入图片描述
最后给出完整的代码:

<
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值