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

时间:2018-01-14 00:34:46

标签: algorithm search pseudocode

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&gt; O)'替换此伪代码中的'If(result&lt; O)'?

2 个答案:

答案 0 :(得分:2)

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

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

您可以在此处详细了解: https://research.googleblog.com/2006/06/extra-extra-read-all-about-it-nearly.html

答案 1 :(得分:1)

result中的compareTo()将/应包含以下内容之一:

0 : equal
1 : greater than
-1: less than