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

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

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.

相关推荐
热点推荐
这样的汉奸,应该开除国籍

这样的汉奸,应该开除国籍

燕梳楼频道
2026-10-19 12:30:38
男子花3500找了一个小姐,又觉得不过瘾,让小姐再喊个闺蜜过来“一起玩”

男子花3500找了一个小姐,又觉得不过瘾,让小姐再喊个闺蜜过来“一起玩”

张晓磊
2026-10-18 11:58:47
电动汽车为什么都不保值?直到我刷到一个网友的分享,瞬间顿悟

电动汽车为什么都不保值?直到我刷到一个网友的分享,瞬间顿悟

夜深爱杂谈
2026-10-19 20:44:49
99%成年人该懂的人性潜规则:不要免费给任何人建议——你的掏心掏肺,可能只是多管闲事

99%成年人该懂的人性潜规则:不要免费给任何人建议——你的掏心掏肺,可能只是多管闲事

清风拂心
2026-10-07 07:30:07
律师向国务院递交立法建议:交公粮应视同社保缴费,提高农民退休金待遇刻不容缓

律师向国务院递交立法建议:交公粮应视同社保缴费,提高农民退休金待遇刻不容缓

互联网大观
2026-10-18 15:36:40
妻子生日买一万六手机五千四羽绒服,丈夫嫌大手大脚,她回怼丈夫没本事挣大钱

妻子生日买一万六手机五千四羽绒服,丈夫嫌大手大脚,她回怼丈夫没本事挣大钱

观世记
2026-10-19 16:27:44
海湾杯2连胜!十人U16国足2-1阿曼 袁博涵造2球 刘凯源破门+染红

海湾杯2连胜!十人U16国足2-1阿曼 袁博涵造2球 刘凯源破门+染红

我爱英超
2026-10-20 03:16:08
特斯拉这台被夸上天的飞行汽车,座舱后面塞了两个“定时炸弹”

特斯拉这台被夸上天的飞行汽车,座舱后面塞了两个“定时炸弹”

不掉线电波
2026-10-18 22:54:55
央行出利好了,防踩踏……

央行出利好了,防踩踏……

资本时差
2026-10-19 18:08:31
39岁真人秀女星自曝:亲过她、舔过她,还和主持人抽过大麻

39岁真人秀女星自曝:亲过她、舔过她,还和主持人抽过大麻

热搜摘要官
2026-10-19 00:01:41
我国对盾构机实施出口管制,来得及时,印度盾构机,牛吹早了

我国对盾构机实施出口管制,来得及时,印度盾构机,牛吹早了

王新喜
2026-10-19 21:19:29
李在明宣布迁都,44个中央机关限时搬出首尔,南下世宗避开三八线

李在明宣布迁都,44个中央机关限时搬出首尔,南下世宗避开三八线

牛锅巴小钒
2026-10-19 06:39:28
最尴尬的“新片”,刘德华主演《白衣逆行者》

最尴尬的“新片”,刘德华主演《白衣逆行者》

胡影
2026-10-17 14:18:08
本土剧男演员挺沈伯洋,叫嚣不怕被抵制但压根没有大陆市场

本土剧男演员挺沈伯洋,叫嚣不怕被抵制但压根没有大陆市场

郭茂辰海峡传真
2026-10-19 23:20:10
iPhone Duo仅支持eSIM竟成用户“痛点” 出国用需要先一个删号?

iPhone Duo仅支持eSIM竟成用户“痛点” 出国用需要先一个删号?

天极网
2026-10-19 16:48:48
上海105:92北控!3个没想到:2国手对飙+残阵仍赢球,体现1优势

上海105:92北控!3个没想到:2国手对飙+残阵仍赢球,体现1优势

董说体育
2026-10-19 21:41:05
连线亲历法国暴力骚乱的中国公民:购物受影响,秩序正在恢复

连线亲历法国暴力骚乱的中国公民:购物受影响,秩序正在恢复

南方都市报
2026-10-19 21:50:07
演员张佳宁连续两月被拍到挺孕肚现身,本人及工作室均未正面回应;此前表示结婚会公开,受父母婚姻影响称坚决不会离婚,未来生两个孩子

演员张佳宁连续两月被拍到挺孕肚现身,本人及工作室均未正面回应;此前表示结婚会公开,受父母婚姻影响称坚决不会离婚,未来生两个孩子

台州交通广播
2026-10-17 12:49:57
约会时刺激女人荷尔蒙的两招,尤其第二个是王牌,她根本挡不住

约会时刺激女人荷尔蒙的两招,尤其第二个是王牌,她根本挡不住

风起见你
2026-10-20 07:06:01
唏嘘,郎平再赴上海看望汤淼,19年没断过,周苏红也有情有义!

唏嘘,郎平再赴上海看望汤淼,19年没断过,周苏红也有情有义!

体坛侃侃球
2026-10-19 09:50:17
2026-10-20 07:43:00
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
194文章数 86关注度
往期回顾 全部

科技要闻

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

头条要闻

特朗普狠批泽连斯基"不想结束战争" 泽连斯基强硬回怼

头条要闻

特朗普狠批泽连斯基"不想结束战争" 泽连斯基强硬回怼

体育要闻

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

娱乐要闻

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

财经要闻

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

汽车要闻

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

态度原创

教育
旅游
本地
时尚
公开课

教育要闻

中等生直接去括号,学霸都先乘上这个数

旅游要闻

西藏山南——“文旅+”业态多点开花

本地新闻

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

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

公开课

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

无障碍浏览 进入关怀版