这个二进制搜索的伪代码是否正确?

问题描述 投票:0回答:2
Boolean Binary Search (first,last)
if (last > first)
  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 (first, middle - 1)
    else
      Binary Search(middle + 1, last)

'O'代表什么?如果它是我们想要搜索的项目,我们是否需要用'If(result> O)'替换此伪代码中的'If(result <O)'?

algorithm search pseudocode
2个回答
2
投票

此代码包含一个非常微妙的错误:如果(first + last) / 2first的总和大于支持的最大值,last可能会导致溢出。

更好的选择是使用first + (last - first) / 2

你可以在这里阅读更多相关信息:https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html


1
投票

来自resultcompareTo()将/应包含以下内容之一:

0 : equal
1 : greater than
-1: less than
© www.soinside.com 2019 - 2024. All rights reserved.