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

这段Binary Search伪代码是否正确?O的含义及逻辑调整疑问

二分查找伪代码问题解答

咱们来逐个拆解你的问题:

1. 这份Binary Search伪代码是否正确?

绝对不正确,有两处核心逻辑错误:

  • 终止条件搞反了:开头写的if (last > first) return false完全不对——只有当起始索引first大于结束索引last时,才说明整个查找范围已经空了,找不到目标元素,这时候才该返回false。正确的终止条件应该是if (first > last) return false。
  • 递归查找方向完全错了:按照compareTo方法的通用规则,list[middle].compareTo(item)返回负数,意味着当前中间元素比待查找的item小。这时候目标元素应该在右半部分(因为二分查找要求列表是有序的),但伪代码里却跑去左半部分(first到middle-1)找,完全搞反了方向;同理,当返回正数时,中间元素比item大,应该去左半部分找,伪代码却跑去了右半部分,这会导致大部分情况都找不到正确元素。

2. 提问中的'O'代表什么?若'O'为待查找元素,是否需要替换条件?

结合上下文来看,这里的'O'大概率是输入时的笔误,应该指的是伪代码里的item(也就是待查找的目标元素)。

如果'O'确实是待查找元素,那不是简单替换If(result < O)为If(result > O)的问题,而是要彻底修正递归分支的逻辑:

  • 当result < 0(即list[middle] < 目标元素),应该递归调用Binary Search(middle + 1, last),去右半部分找更大的元素
  • 当result > 0(即list[middle] > 目标元素),应该递归调用Binary Search(first, middle - 1),去左半部分找更小的元素

给你贴个修正后的伪代码参考:

Boolean Binary Search (first,last)
if (first > last) return false
else
    Set middle to (first+last)/2
    Set result to list[middle].compareTo(item)
    if (result is equal to 0) return true
    else if (result < 0) Binary Search(middle + 1, last)
    else Binary Search(first, middle - 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:32:47