python - python奇怪行为中的二进制搜索

标签 python binary-search

请看这段代码:

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) 时,我得到了 true,当我输入 chop(a, 2) 时,我得到了 true ,但是当我输入 chop(a, 3) 时,我没有得到答案,只有 Python Shell 中的空行。

有人知道发生了什么事吗?

最佳答案

我猜这是你的错误:

low = mid + 1

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

将该行更改为:

lo = mid + 1

并且您的算法应该有效。

关于python - python奇怪行为中的二进制搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918348/

相关文章:

python - 使用 Django 的 `reverse_lazy` 并将其连接起来

c - 在单调递增然后递减的序列cera中找到一个数字

java - 作业问题:只需要一个基本情况提示,当一个单词不存在时就为递归二进制搜索抛出异常

python - 将双端队列的字典减少为单个 bool 值

换行符后带有三个点的 python 字符串...这是什么东西?

python - python的行和列限制

python - 解读 Django 源代码

java - 如何在Java中进行二进制搜索

java - 什么更快 : Using Quicksort then Binary Search OR Just Linear Search?