网易首页 > 网易号 > 正文 申请入驻

为什么二分查找每次都能砍掉一半?拆开看就四步

0
分享至

  打开一本按字母排序的词典,找一个以 L 开头的单词。你不会从第一页翻起,而是一把翻到中间。如果中间那页是 M,L 在 M 前面,右半边整本可以直接扔掉;如果中间是 K,L 在 K 后面,左半边同样作废。重复这个动作,直到翻到那一页。

  

  这就是二分查找的全部直觉。它靠的是分治思路:每一步都把剩余的搜索空间砍掉一半。和从头到尾逐个比对的线性查找放在一起,差距在数据量变大后会变得非常明显。

  前提只有一个:数据必须有序

  二分查找要能跑起来,搜索空间必须是排好序的,或者至少是单调的——持续递增或持续递减。如果数据是乱序的,你没有任何依据判断目标落在哪一半,也就没法丢掉任何一半。这条前提不满足,后面所有步骤都不成立。

  两个指针,四步循环

  整个算法用两个索引指针圈定搜索范围:low(左边界,范围起点)和 high(右边界,范围终点)。之后就是一套固定的逻辑:

  初始化:low = 0,high = N - 1,N 是数据集里的元素个数。

  算出当前范围的中点索引 mid。

  拿 mid 位置的元素和目标值比较。

  根据比较结果收缩边界,然后重复第 2、3 步,直到 low 越过 high。

  第 3 步的比较有三种结果,对应三种动作:

  相等:mid 位置的元素就是目标,直接返回 mid。

  mid 元素大于目标:目标只可能在左半边,把上边界收进来,high = mid - 1。

  mid 元素小于目标:目标只可能在右半边,把下边界抬上去,low = mid + 1。

  循环的继续条件是 low 不超过 high。一旦两个指针交叉,说明范围已经空了,目标不在这个集合里。

  拿 [1, 3, 5, 7, 9] 找 7 走一遍

  第一轮:low = 0,high = 4。中点 mid = 0 + Math.floor((4 - 0) / 2) = 2,索引 2 上的元素是 5。5 小于目标 7,目标在右半边,下边界更新为 low = mid + 1 = 3。

  第二轮:low = 3,high = 4。中点 mid = 3 + Math.floor((4 - 3) / 2) = 3,索引 3 上的元素是 7。和目标相等,命中,函数在这里停下并返回索引 3。

  五元素的数组,两轮就结束。数组越长,这种折半的优势越明显——每比较一次,待查范围就少一半。

  上边界开闭,两种写法都行

  上面的实现用的是闭区间上界,也就是 high 这个索引本身包含在搜索循环里。也有开发者习惯用开区间上界,把 high 设成 arr.length。选开区间的话,循环条件要改成 while (low < high),右侧边界的收缩方式也要相应改成 high = mid。

  两种写法都能正常工作。开区间上界在找缺失元素的插入位置这类场景里更好用一些。

  代码骨架大致是这样:循环里先算 mid,命中就返回;mid 元素大于目标就把 high 收到 mid - 1,否则把 low 抬到 mid + 1;循环走完还没命中,返回 -1。

  逻辑改动很小,但数组一大,性能上的差别就出来了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
也门一军事基地遭导弹袭击致53死200余伤

也门一军事基地遭导弹袭击致53死200余伤

新华社
2026-10-19 22:11:32
一整船新iPhone在霍尔木兹海峡沉了,有当地人打捞后当场出售;苹果客服:不会让这批有瑕疵的货物二次流入市场

一整船新iPhone在霍尔木兹海峡沉了,有当地人打捞后当场出售;苹果客服:不会让这批有瑕疵的货物二次流入市场

华商网
2026-10-19 15:00:22
离婚6天被前夫喊去帮忙立遗嘱,35岁女子用AI意外救下前夫哥一命……

离婚6天被前夫喊去帮忙立遗嘱,35岁女子用AI意外救下前夫哥一命……

蓬勃新闻
2026-10-19 12:34:38
为什么暴乱总发生在法国?

为什么暴乱总发生在法国?

西游日记
2026-10-19 08:49:07
山东打响第一枪:“个人是养老第一责任人”

山东打响第一枪:“个人是养老第一责任人”

毒哥的毒鸡汤
2026-10-19 16:38:18
豆包回应“国内超一半算力在造爽剧”:字节只有约10%算力用于视频生成模型的训练和推理

豆包回应“国内超一半算力在造爽剧”:字节只有约10%算力用于视频生成模型的训练和推理

澎湃新闻
2026-10-19 13:08:27
刘强东硬刚抖音,引爆全网!

刘强东硬刚抖音,引爆全网!

大佬灼见
2026-10-19 22:42:34
重罚!曝曼城本赛季将面临巨额罚款+扣分确保降级 下赛季还会扣分

重罚!曝曼城本赛季将面临巨额罚款+扣分确保降级 下赛季还会扣分

我爱英超
2026-10-19 22:01:08
上海大胜北控:张镇麟28分屡秀暴扣 廖三宁34+5+4创生涯纪录

上海大胜北控:张镇麟28分屡秀暴扣 廖三宁34+5+4创生涯纪录

醉卧浮生
2026-10-19 21:26:25
日本网友:福原爱穿透视装出镜看着真让人难受 她以前可是国民妹妹

日本网友:福原爱穿透视装出镜看着真让人难受 她以前可是国民妹妹

劲爆体坛
2026-10-18 07:59:06
泽连斯基下令袭击普京家乡,此前鲁比奥说乌未获“星盾”使用权打击俄本土

泽连斯基下令袭击普京家乡,此前鲁比奥说乌未获“星盾”使用权打击俄本土

新民周刊
2026-10-19 13:12:33
又一个龟男的世界崩塌了!网传绍兴一男子遇到妻子和情人约会,咆哮每月1.3万工资,1.25万上交老婆

又一个龟男的世界崩塌了!网传绍兴一男子遇到妻子和情人约会,咆哮每月1.3万工资,1.25万上交老婆

火山詩话
2026-10-19 15:16:53
3.23亿老人背后,“个人是养老第一责任人”,这话到底说给谁听?

3.23亿老人背后,“个人是养老第一责任人”,这话到底说给谁听?

八荒果子
2026-10-19 10:39:31
华尔街传出噩耗,全球股市一夜崩溃,韩国熔断跌8%,金融危机要来

华尔街传出噩耗,全球股市一夜崩溃,韩国熔断跌8%,金融危机要来

关权教授聊经济
2026-10-19 15:42:06
商家称53万元直播合作成交3672.8元 交个朋友回应:未违约,愿补播协商

商家称53万元直播合作成交3672.8元 交个朋友回应:未违约,愿补播协商

封面新闻
2026-10-19 17:41:43
明明中国的人均收入很低,但为啥老百姓的生活比发达国家都要好?

明明中国的人均收入很低,但为啥老百姓的生活比发达国家都要好?

李健政观察
2026-10-18 10:32:07
大瓜!邯郸篮球直播忘关麦事件

大瓜!邯郸篮球直播忘关麦事件

新动察
2026-10-19 15:09:35
破解 AI 推理效率困局,详解华为 OceanStor M900 AI记忆存储新基建 | 前沿在线

破解 AI 推理效率困局,详解华为 OceanStor M900 AI记忆存储新基建 | 前沿在线

前沿在线
2026-10-08 21:34:14
证监会新规直指违规减持乱象,减持比例超5%、金额超5亿将被重罚

证监会新规直指违规减持乱象,减持比例超5%、金额超5亿将被重罚

第一财经资讯
2026-10-19 19:26:44
李小冉发文承认离婚:“去年已离互不牵扯,互不打扰,祝各自安好”

李小冉发文承认离婚:“去年已离互不牵扯,互不打扰,祝各自安好”

韩小娱
2026-10-19 20:06:00
2026-10-20 04:39:00
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
190文章数 86关注度
往期回顾 全部

科技要闻

王晟:近千亿资金涌入后 具身智能开始退烧

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

头条要闻

中国留学生披旭日旗事件最新进展:目前已被遣返

体育要闻

从NBA退役10年后,他真去警局上班了

娱乐要闻

奚梦瑶回应重返维密:还是很开心的

财经要闻

黄奇帆之子往事:从广微系到魏桥的跳跃

汽车要闻

不知道二代海鸥多好玩? 上赛道跑两圈 很过瘾的

态度原创

时尚
房产
亲子
本地
健康

中国第一位女指挥:97岁,不退休,不退场

房产要闻

最新房价:海口,三亚齐跌!

亲子要闻

无论和谁相处,这八个忠告一定要牢记!

本地新闻

因新荣记出圈,这座浙东小城才是吃货天堂

看着很健康的人,怎么会突然猝死?

无障碍浏览 进入关怀版