这段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
相关产品推荐
相关产品推荐

