python - 二进制搜索 python 3.5

标签 python runtime-error binary-search python-3.5

我正在尝试在 python 3.5 中编写二进制搜索,但它不会工作我不确定为什么。

def binarySearch(alist, value):

    first = 0
    last = len(alist)-1
    midpoint = (last//2)
    while binarySearch:
        if value == alist[midpoint]:
            return True and print ("found")
        else:
            if value < midpoint:
                last = midpoint-1
            else:
                if value > midpoint:
                    first = midpoint+1    
binarySearch([1,2,3,4,5,6,7,8],3)

如果我将值设置为 4,它会显示已找到,如果我设置任何其他值,则什么也不会发生,并且它一直在运行,什么也不做。

感谢您的帮助。

最佳答案

User1915011 抢先回答了我。根据他的回答和@wim 的评论,我对您的 binarySearch 进行了以下更改。方法。

  1. 将循环更改为使用 found变量
  2. midpoint 添加了额外的分配循环内
  3. 通过添加 first<=last 确保循环终止
  4. while之后返回发现循环以指示成功或失败。

    def binarySearch(alist, value):
    
        first = 0
        last = len(alist)-1
        found = False
        while first<=last and not found:
            midpoint = (first + last)//2
            if value == alist[midpoint]:        
                found =  True 
            else:
                if value < alist[midpoint]:
                    last = midpoint-1
                else:
                    if value > midpoint:
                        first = midpoint+1  
        return found
    
    if binarySearch([1,2,3,4,5,6,7,8],3):
        print "found"
    

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

相关文章:

arrays - 为什么 Rust 在运行时检查数组边界,而(大多数)其他检查发生在编译时?

python - Python中的函数未定义错误

python - 如何防止数字在图中变为指数形式

java - java 中的 Google App Engine API 中的错误 204

c - 在 C 中使用 char** 时出现运行时错误 "load of null pointer of type char"

c - 从 3 个数组中找出 3 个数字 a、b、c,其总和等于给定数字 T?

java - Arrays.BinarySearch 没有保证吗?

java - 使用二进制搜索插入有序数组

python - pyinstaller 无法与 pyvis 网络一起使用

python - 二维数组中的 NaN 插值。人口稀少