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

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

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.

相关推荐
热点推荐
NBA太残酷,灰熊裁掉25年首轮第18号秀,他和杨瀚森是同届好友!

NBA太残酷,灰熊裁掉25年首轮第18号秀,他和杨瀚森是同届好友!

爱体育
2026-10-20 23:22:41
特朗普为何把俄乌和平斡旋演成政治闹剧

特朗普为何把俄乌和平斡旋演成政治闹剧

小眼睛小世界
2026-10-20 04:23:05
8799元跌到4989元,iPhone Air京东自营破五千

8799元跌到4989元,iPhone Air京东自营破五千

像素与芯片
2026-10-20 21:57:15
主教练亲口承认:杨瀚森无法进入球队轮换,除非罗威缺阵!

主教练亲口承认:杨瀚森无法进入球队轮换,除非罗威缺阵!

爱体育
2026-10-20 23:47:33
“余生好好走”,知名央视主持人王小丫,病床上的留言字字催泪

“余生好好走”,知名央视主持人王小丫,病床上的留言字字催泪

断送一世容颜
2026-10-14 11:33:14
日本为什么专挑中国游客涨签证费

日本为什么专挑中国游客涨签证费

小眼睛小世界
2026-10-20 04:19:33
周小川:应开展研究并做好预案,防范AI领域投资失败引发的金融风险

周小川:应开展研究并做好预案,防范AI领域投资失败引发的金融风险

界面新闻
2026-10-20 16:06:50
公安部原副部长俞雷同志逝世

公安部原副部长俞雷同志逝世

南方都市报
2026-10-20 20:32:56
刘国梁被举报不到24小时,更多信息被扒,张继科的话像“一把火”

刘国梁被举报不到24小时,更多信息被扒,张继科的话像“一把火”

晓帝爱八卦
2026-10-20 10:30:57
为什么中国要给高端装备出口装上安全阀?

为什么中国要给高端装备出口装上安全阀?

小眼睛小世界
2026-10-20 04:27:12
奚梦瑶重返T台,大腿肉松垮,走路哆嗦表情谄媚,对比刘雯差太远

奚梦瑶重返T台,大腿肉松垮,走路哆嗦表情谄媚,对比刘雯差太远

卿羽飞本尊
2026-10-19 19:15:03
“谷歌陈立人杀妻案”新进展:他申请无罪辩护,愿被关在精神病院一辈子

“谷歌陈立人杀妻案”新进展:他申请无罪辩护,愿被关在精神病院一辈子

江山挥笔
2026-10-20 13:32:25
曝街霸新片有春丽大尺度裸露镜头!美乳翘臀一览无余

曝街霸新片有春丽大尺度裸露镜头!美乳翘臀一览无余

游民星空
2026-10-19 16:04:41
李小璐首谈遭受8年网暴:父亲为自己打了多场官司,全胜且赔偿金额巨大;当年“做头发”的梗与网传版本并不相同

李小璐首谈遭受8年网暴:父亲为自己打了多场官司,全胜且赔偿金额巨大;当年“做头发”的梗与网传版本并不相同

今古深日报
2026-08-03 10:33:17
北爱尔兰公开赛:32强诞生!中国斯诺克占6席,赵心童2-4首轮出局

北爱尔兰公开赛:32强诞生!中国斯诺克占6席,赵心童2-4首轮出局

郝小小看体育
2026-10-21 01:00:10
李小冉凌晨发文怒斥:删我评论对吧,你那么见不得人吗

李小冉凌晨发文怒斥:删我评论对吧,你那么见不得人吗

南方都市报
2026-10-20 11:01:47
鲁比奥:美国与乌克兰关系非常紧张,特朗普对有关他“故意采取行动损害乌克兰利益”的说法感到不满,认为这“不公平,也不符合事实”

鲁比奥:美国与乌克兰关系非常紧张,特朗普对有关他“故意采取行动损害乌克兰利益”的说法感到不满,认为这“不公平,也不符合事实”

政知新媒体
2026-10-20 22:48:18
中国十大悬案(两案已告破)

中国十大悬案(两案已告破)

年代回忆
2026-10-17 20:10:28
尼克斯揭幕战票价飙到3000美元,詹姆斯首披76人球衣

尼克斯揭幕战票价飙到3000美元,詹姆斯首披76人球衣

时光慢旅人
2026-10-21 03:10:21
吃相难看,英达小儿子曝出猛料,英达和巴图“撕破脸” 宋丹丹气愤

吃相难看,英达小儿子曝出猛料,英达和巴图“撕破脸” 宋丹丹气愤

长歌侃娱
2026-10-19 18:01:14
2026-10-21 03:47:00
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
219文章数 86关注度
往期回顾 全部

科技要闻

新版MiniMax,能和DeepSeek掰手腕吗?

头条要闻

距中国台湾110公里 日美出动6万人大举军演为历史之最

头条要闻

距中国台湾110公里 日美出动6万人大举军演为历史之最

体育要闻

巴拉克:天生亚军与漫长极夜

娱乐要闻

刘恺威承认新恋情,打球认识

财经要闻

抄底万达之后 私募大佬又对恒大下手了

汽车要闻

黑科技一次看全 2026奇瑞全球创新大会干货汇总

态度原创

时尚
亲子
手机
艺术
公开课

秋天穿印花裙真的很有氛围感!不显胖、不呆板,大方又显气质

亲子要闻

奇!41岁女子不知怀孕,腹部剧痛送医顺产7斤儿子!

手机要闻

iPhone Duo铰链上方屏幕按压会下陷起皱 苹果尚未说明是否影响耐用性

艺术要闻

谁敢信?63岁大爷的油画竟被选进美院教材,质感强到像要溢出屏幕!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版