You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分查找(Binary Search)查找'TARYN'的正确方法与步骤确认

二分查找找'TARYN':哪种方法更靠谱?

先给你理清楚核心前提:二分查找能生效的关键是列表必须是有序的——不过先看你给的这个列表,里面REUBEN在TARYN后面但字母顺序R比T靠前,明显是乱序的,这个先记下来,后面会说到。

咱们先把列表的索引和对应元素列出来,方便一步步分析:

  • 索引0: ANNE
  • 索引1: BEN
  • 索引2: CLIVE
  • 索引3: DAVE
  • 索引4: ETHAN
  • 索引5: GAL
  • 索引6: STEVE
  • 索引7: TARYN
  • 索引8: REUBEN
  • 索引9: YVONNE

先看方法1的逻辑

你提到方法1阶段1是MP=(0+9)/2=4.5=4,也就是用向下取整的方式取中点mid=4,对应元素是ETHAN。接下来按常规二分查找,会比较'TARYN'和ETHAN的字母顺序——TARYN更大,所以会舍弃左半部分(索引0-4),去右半部分(索引5-9)继续找。

但这里有个大问题:你的列表是乱序的!REUBEN在索引8,字母顺序比TARYN小,但位置却在TARYN后面,这时候按字母顺序判断的话,后续查找会出错;如果只是按列表的位置“前后”来判断(不管字母),那二分查找的意义就没了,因为根本没利用有序性,纯靠碰运气。

再聊你倾向的方法2

虽然你没写出方法2的完整步骤,但大概率是用了向上取整的中点计算,比如MP=(0+9+1)/2=5,直接取mid=5,对应元素是GAL。同样比较字母顺序,TARYN更大,所以去右半部分(索引6-9),这时候再算中点(6+9)/2=7.5,向下取整就是7,正好命中TARYN——这也是你倾向它的原因吧?

到底哪种更合适?

得分两种情况说:

情况1:列表是严格按字母升序排列的(你的列表是写错了)

如果把列表改成正确的有序状态:ANNE、BEN、CLIVE、DAVE、ETHAN、GAL、REUBEN、STEVE、TARYN、YVONNE——这时候两种方法都是合法的二分查找实现,没有对错之分,只是不同的实现细节:

  • 向下取整是最常见的写法,比如很多语言里用(low + high) // 2;
  • 向上取整一般是为了避免边界死循环(比如当low和high相邻时,向下取整可能一直停在low,导致无法推进)。
    两者最终都能找到目标,只是步骤多少的区别,不存在“更合适”,看你要处理的边界场景。

情况2:就按你现在给的乱序列表

这时候两种方法都不靠谱!因为二分查找的核心是利用有序性快速缩小范围,列表乱序的话,每次取中点后根本没法确定目标在左半部分还是右半部分,这次方法2能找到只是巧合,换个目标比如REUBEN,用二分查找大概率找不到。这种情况要么先把列表排序,要么直接用线性查找(一个个遍历)。

总结一下:如果是有序列表,两种方法都是有效的实现;如果是乱序列表,二分查找本身就不适用,别纠结哪种方法了。

内容的提问来源于stack exchange,提问作者Compoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:22:18