【问题标题】:binary search in python weird behaviorpython奇怪行为中的二进制搜索
【发布时间】:2012-04-12 16:26:23
【问题描述】:

请看这段代码:

def chop(array, search):
        lo = 0
        high = len(array) - 1
        while lo <= high:
                mid = (high + lo) /2
                if array[mid] == search:
                        return 'true'
                elif search > array[mid]:
                        low = mid + 1
                else:
                        high = mid - 1
        return 'false'



if __name__ == '__main__':
        a = [1,2,3,4,5,6,7,8,9,10]
        print chop(a, 3)

我写了这个小脚本,它应该在数组中搜索数字 - 常规二进制搜索。所以我运行脚本,例如当我输入chop(a, 1) 时我得到了正确,当我输入chop(a, 2) 时我得到了正确,但是当我输入chop(a, 3) 时我没有得到答案,只是空行Python Shell。

有人知道发生了什么吗?

【问题讨论】:

  • 'true''false'? True and False呢?
  • 当 mid = 1 时,您的二分搜索会停止。尝试在循环中打印 mid 的值。
  • 在bisect模块中有类似的功能

标签: python binary-search


【解决方案1】:

我猜这是你的错误:

low = mid + 1

您的while 循环使用变量lo,并且您在while 循环中定义了一个名为low 的新变量。本质上,您永远不会更新您的 lo 变量。

将该行更改为:

lo = mid + 1

你的算法应该可以工作。

【讨论】:

  • 就是这样。我不敢相信我没有注意到它!谢谢
  • 发生在我们最好的人身上 :) 不用担心
  • 啊,这就是为什么我不喜欢python的声明。很容易错过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2015-09-25
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多