python - 二进制搜索中的无限循环

标签 python infinite-loop binary-search

我正在尝试使用以下函数实现二进制搜索:

def buggy_binary_search(input, key):
    low = 0
    high = len(input)-1
    mid = (low + high)/2
    while low <= high:
        if input[mid] == key:
            return mid
        if input[mid] > key:
            high = mid - 1
        else:
            low = mid
    return -1

上面的函数运行时,进入死循环。我该如何纠正?

最佳答案

因为,您没有更新 mid 的值,while 循环不断检查相同的元素并进入无限循环,要纠正许多人指出的问题,请更新 mid 在 while 循环中。
此外,您应该执行 low = mid+1 而不是 low = mid

完整代码如下:-

    def binary_search(input, key):
       low = 0
       high = len(input)-1
       mid = (low + high)/2
       while low <= high:
          mid = (low + high)/2
          if input[mid] == key:
             return mid
          if input[mid] > key:
             high = mid - 1
          else:
             low = mid + 1
       return -1

确保输入已排序!

关于python - 二进制搜索中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21449278/

相关文章:

c++ - 我的二进制搜索应用程序不在这里吗?

python - 了解 Docker/Docker-Compose 上的 Gunicorn 和 Flask

Python无法连接到同一网络上的打开套接字

JavaScript 无限 For 循环

java - 当没有无限递归方法时,是什么导致了这个堆栈溢出错误?

python - 二进制搜索功能

python - 何时在 Tensorflow 模型保存中使用 .ckpt、.hdf5 和 .pb 文件扩展名?

python - 如何在 VS Code 中设置 Python Interactive 窗口的导入路径?

sql - H2查询中的无限循环

c - 使用 C 中的二分查找函数在数组中查找单词?