二分查找(Binary Search)

article/2025/6/7 3:56:16

二分查找(Binary Search)1、定义

二分查找又称折半查找,它是一种效率较高的查找方法。

二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。

2、基本思想

二分查找的基本思想是:

设R[low..high]是当前的查找区间

(1)首先确定该区间的中点位置:

(2)然后将待查的K值与R[mid].key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找,具体方法如下:

① 若R[mid].key>K,则由表的有序性可知R[mid..n].keys均大于K,因此若表中存在关键字等于K的结点,则该结点必定是在位置mid左边的子表R[1..mid-1]中,故新的查找区间是左子表R[1..mid-1]。

② 若R[mid].key<K,则要查找的K必在mid的右子表R[mid+1..n]中,即新的查找区间是右子表R[mid+1..n]。下一次查找是针对新的查找区间进行的。

因此,从初始的查找区间R[1..n]开始,每经过一次与当前查找区间的中点位置上的结点关键字的比较,就可确定查找是否成功,不成功则当前的查找区间就缩小一半。这一过程重复直至找到关键字为K的结点,或者直至当前的查找区间为空(即查找失败)时为止。

也顺序查找的比较动画

3、存储结构

二分查找只适用顺序存储结构

4、二分查找算法

/*折半查找*/

intBinary_Search(inta*,intn,intkey)

{

intlow,high,mid;

low=1; /*定义最底下标为记录首位*/

high=n; /*定义最高下标为记录末位*/

while(low<=high)

{

mid=(low+high)/2; /*折半*/

if(key<a[mid])

high=mid-1;

if(key>a[mid])

low=mid+1;

else

returnmid;

}

return0;

}

也可以如下构造参数:

intBinSearch(SeqList R,KeyType K)

{

//在有序表R[1..n]中进行二分查找,成功时返回结点的位置,失败时返回零

intlow=1;

inthigh=n;

intmid;

//置当前查找区间上、下界的初值

while(low<=high)

//当前查找区间R[low..high]非空

{

mid=(low+high)/2;

if(R[mid].key==K)

returnmid;

//查找成功返回

if(R[mid].kdy>K)

high=mid-1;

//继续在R[low..mid-1]中查找

else

low=mid+1;

//继续在R[mid+1..high]中查找

}

return0;

//当low>high时表示查找区间为空,查找失败

}

5、算法分析

执行过程

设算法的输入实例中有序的关键字序列为

(05,13,19,21,37,56,64,75,80,88,92)

拓展:

二分查找判定树

二分查找过程可用二叉树来描述:把当前查找区间的中间位置上的结点作为根,左子表和右子表中的结点分别作为根的左子树和右子树。由此得到的二叉树,称为描述二分查找的判定树(Decision Tree)或比较树(Comparison Tree)。

注意:

判定树的形态只与表结点个数n相关,而与输入实例中R[1..n].keys的取值无关。

(1)二分查找判定树的组成

①圆结点即树中的内部结点。树中圆结点内的数字表示该结点在有序表中的位置。

②外部结点:圆结点中的所有空指针均用一个虚拟的方形结点来取代,即外部结点。

③树中某结点i与其左(右)孩子连接的左(右)分支上的标记"<"、"("、">"、")"表示:当待查关键字K<R[i].key(K>R[i].key)时,应走左(右)分支到达i的左(右)孩子,将该孩子的关键字进一步和K比较。若相等,则查找过程结束返回,否则继续将K与树中更下一层的结点比较。

(2)二分查找判定树的查找

二分查找就是将给定值K与二分查找判定树的根结点的关键字进行比较。若相等,成功。否则若小于根结点的关键字,到左子树中查找。若大于根结点的关键字,则到右子树中查找。

【例】对于有11个结点的表,若查找的结点是表中第6个结点,则只需进行一次比较;若查找的结点是表中第3或第9个结点,则需进行二次比较;找第1,4,7,10个结点需要比较三次;找到第2,5,8,11个结点需要比较四次。

由此可见,成功的二分查找过程恰好是走了一条从判定树的根到被查结点的路径,经历比较的关键字次数恰为该结点在树中的层数。若查找失败,则其比较过程是经历了一条从判定树根到某个外部结点的路径,所需的关键字比较次数是该路径上内部结点的总数。

【例】待查表的关键字序列为:(05,13,19,21,37,56,64,75,80,88,92),若要查找K=85的记录,所经过的内部结点为6、9、10,最后到达方形结点"9-10",其比较次数为3。

实际上方形结点中"i-i+1"的含意为被查找值K是介于R[i].key和R[i+1].key之间的,即R[i].key<K<R[i+1].key。

二分查找的平均查找长度

设内部结点的总数为n=2h-1,则判定树是深度为h=lg(n+1)的满二叉树(深度h不计外部结点)。树中第k层上的结点个数为2k-1,查找它们所需的比较次数是k。因此在等概率假设下,二分查找成功时的平均查找长度为:

ASLbn≈lg(n+1)-1

二分查找在查找失败时所需比较的关键字个数不超过判定树的深度,在最坏情况下查找成功的比较次数也不超过判定树的深度。即为:

二分查找的最坏性能和平均性能相当接近。

二分查找的优点

折半查找的时间复杂度为O(logn),远远好于顺序查找的O(n)。

二分查找的缺点

虽然二分查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算。既使采用高效率的排序方法也要花费O(nlgn)的时间。

适用情况

二分查找只适用顺序存储结构。为保持表的有序性,在顺序结构里插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动、而又经常需要查找的线性表。

对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。链表上无法实现二分查找。


http://www.hkcw.cn/article/cfvFcYaPNt.shtml

相关文章

2025年QS前600英国大学排名一览!重点说一下帝国理工,诺丁汉、圣安的名次

今年的QS世界大学排名可谓是“几家欢喜几家愁”。英国共有90所大学上榜,虽然面临着前所未有的挑战,但依然有不少亮眼表现。 01 英国大学整体表现 三所英国大学稳居世界前五 是的,你没看错!在全球顶尖学府的竞争中,英国的三所大学(帝国理工、牛津、剑桥)依然稳坐前五的宝…

旅游攻略之王猫途鹰,除了卖身也没路了 | 旅讯八点正

内容平台变现是难题。 全球知名旅游点评网站猫途鹰(Tripadvisor)年初发布一则重磅消息,宣布成立特别委员会寻求出售。虽然目前买家还未定,但猫途鹰“卖身”的消息一经放出就引起了市场反响,当天股价反而飞升了15.8%。 曾经的点评巨头、攻略之王,从旅企巨头收购潮、到竞夺…

文件加密软件排行榜前十名,2024超好用的十款文件加密软件

在如今的信息时代,数据安全成为了个人和企业都必须重视的一个关键问题。为了保护敏感信息不被泄露,选择一款可靠的文件加密软件至关重要。2024年,市场上涌现出了许多优秀的加密软件,它们各具特色。以下是2024年超好用的十款文件加密软件推荐,希望能为你的选择提供参考。 1…

合肥公积金最新攻略:支持异地公积金,额度最高120万(24年5月)

这里整理汇总了大家对合肥公积金非常关心的主要热门问题,可以说是市面上看到非常详细的关于合肥公积金的详细解答,例如公积金贷款额度、外地公积金在合肥直接使用问题,贷款利率问题等等。 本文内容比较长,作者整理不易,喜欢请随手点赞或者收藏下以便后期查阅(本次2024年5…

人事档案中缺少干部履历表可以补救吗?如何补救?

据统计,99%的档案人都关注了这个公众号 👇 建议收藏!除此之外,档案同仁们还可以在公众号聊天页面中发送“人事档案”关键词,查询到哦~ 很多档案内的第一类(履历类)都是空白的,别说1988版干部履历表,1999版的也经常没见着。似乎大家都认为《干部履历表》是一份可有可无…

2024 年 7月手机 CPU 综合性能天梯图

2024-07-05 05:49:07作者:人宝宝 对于手机处理器的理解,往往存在一种误区。有些人认为,既然对手机的性能需求不高,且不常玩游戏,那么顶级的处理器就显得不那么必要。然而,事实上,处理器是手机中几乎所有运算工作的核心。 无论是运行日常APP时依赖的CPU,还是在打游戏或观…

日元或将在2024年回升

日元汇率展望:2024年回升的希望 随着日本银行结束负利率政策和收益率曲线控制政策,以及停止购买交易所买卖基金和日本房地产投资信托基金,日元兑美元汇率表现疲软。然而,在经过短暂的波动后,预测2024年日元汇率有望回升。 日本银行宣布全面调整政策,结束了负利率政策。这…

学习东鹏特饮,从“费用直达”开始!

2024年上半年,用“一枝独秀”来形容东鹏饮料(605499.SH)并不过分。在A股市值大于20亿元的120家食品饮料公司中,2024年上半年市值同比正增长的只有七家;其中,增幅大于10%的有五家,而大于20%的只有两家。东鹏饮料市值增长38.5%遥遥领先于第二名的22.5%。截至2024年8月13日…

日本最受欢迎女星:小野六花如何赢得观众心

在近年来的日本娱乐圈中,小野六花凭借其独特的魅力和出色的演技,迅速崛起,成为了最受欢迎的女明星。她的成功不仅来自于她在荧屏上的出色表现,更在于她对事业的热情和对粉丝的真诚态度。小野六花出生在一个普通的家庭,从小就展现出了对表演的浓厚兴趣。她参加了学校的各种…

最新!事关你的钱袋子!上海医保缴费标准有变化!

国家医保局会同财政部、国家税务总局印发了《关于做好2024年城乡居民基本医疗保障有关工作的通知》(医保发〔2024〕19号),具体内容有哪些,一起来看—— 01 通知要点 ●2024年,各级财政继续加大对居民医保参保缴费补助力度,同时,居民个人缴费增幅适当降低,财政补助和个人…

RFC最近二十年来的动向(2003-2023)

互联网标准文档RFC之于互联网用户,如同空气之于普通人,它透明、隐形,让人意识不到其存在,但同时它又无比关键、必要,赋予了互联网真正的生命与活力,使其在几十年的发展中愈发蓬勃。 01 RFC的概念与意义 RFC(Request for Comments),即征求意见稿,是由互联网工程任务组…

原创曹真到底有多重要?为什么说曹真不死,司马家族就无法篡权?

前言 在三国历史的风云变幻中,曹真是一位举足轻重的人物。作为曹魏的重要将领,他不仅战功赫赫,还深得曹操和曹丕的信任。 然而,曹真的重要性不仅限于军事才能,更在于他对曹魏政权的稳定所起的关键作用。有人说,曹真若不死,司马家族就不可能篡权,这背后到底隐藏着怎样的…

最新发布:兰州居民水电费标准

夏天到了,气温不断升高 下班回家洗澡、空调肯定少不了 随着而来的就是我们的水电费了哇很多宝子不清楚正常水电费是收费多少! 也不知道如何查询及用电明细 让我们一起来看一下吧 *声明:以下价格为官方获取(小编看到的最新的) 如您使用的价格不同,以实际为准! 兰州供水价…

启蒙运动(法文:Siècle des Lumières,英文:The Enlightenment)

启蒙运动(法文:Sicle des Lumires,英文:The Enlightenment,德文:die Aufklrung),指发生在17-18世纪的一场资产阶级和人民大众的反封建,反教会的思想文化运动。是继文艺复兴后的又一次伟大的反封建的思想解放运动。以法国为中心,其核心思想是“理性崇拜”,用理性之光…

私域入门必备!企业微信注册/认证全指南

最近不少刚接触私域的客户,都会问企业微信注册和认证的相关问题,为了帮这些客户快速搞懂企微注册/认证的流程和操作,我们专门写了这篇科普文章,希望能帮到各位。 一、如何注册企业微信? 方式一:在官网注册企业微信 访问官网 https://work.weixin.qq.com/,点击【立即注册…

原创红魔9S Pro评测:手游进入高画质高流畅时代

作为手机市场上仅剩的几个游戏手机品牌,红魔游戏手机在游戏体验上是无与伦比的,甚至它能够提供的体验,是其它大众旗舰手机所不具备的。 在去年年底,红魔游戏手机推出了红魔9系列手机,将机身背部完全做平的造型让人留下了深刻印象,超强的性能和屏下摄像头带来的全屏体验也…

超时空要塞MACROSS系列全回顾

Macross三大必备元素:可变战斗机,NTR,歌 如果想了解Macross系列,知道剧情是没什么用的,因为每一部里面都有前作的梗,非常有趣。 超时空要塞Macross,以下简称M1,是Macross系列的开山之作。1982年开始播放,如果看过很多80年代动画的人应该都知道,M1的制作非常精良,兼用…

主人与玩具的奇幻冒险H漫的历史消失之谜

在一个遥远的国度,有一个神秘的王国,那里的人们过着和谐美好的生活。然而,这个王国的秘密就是它的主人和他们的玩具。这些玩具不仅仅是孩子们的游戏伙伴,更是成年人心灵的慰藉。在这个王国里,有一部特别的漫画,名叫《主人的玩具》,它讲述了一个关于爱与勇气的故事。 故事…

线稿怎么画?教你新手也能学会的线稿画法!

线稿怎么画?教你新手也能学会的线稿画法!漫绘画的入门技巧就是要学习如何画完整的线稿。也许有些人不太清楚什么是线稿,它其实就是我们在素描过程中勾勒出来的轮廓线和重点线条。在动漫绘画中,线稿是非常重要的一环,它不仅能够帮助我们更好地掌握角色的比例和姿态,还能让…

舔狗语录卑微至极,真会一无所获吗?

“舔狗”一词在网络世界里风生水起,却常伴随着摇头与不屑。它像是一个标签,让人不愿轻易贴上。 未曾舔狗,不知其味 我未曾亲历舔狗的角色,也从未有过舔人的念头。因此,对于舔狗的最终归宿,我始终抱有好奇。 网络上的声音五花八门,其中流传着两句截然不同的话: “舔狗舔…