首页 > 解决方案 > 这个二分搜索有什么问题?

问题描述

这个二进制搜索 Python 代码有什么问题?我试过使用这个二进制搜索代码,有高有低,但我可以使用它。请告诉我哪里错了

def binsearch(arr, n):
  t = len(arr) // 2
  if arr[t] == n:
    print("number found at %d"%(t))
  elif arr[t] > n:
    binsearch(arr[:t-1], n)
  elif arr[t] < n:
    binsearch(arr[t+1:], n)
  else:
    print("num not found")

arr = [12, 24, 32, 39, 45, 50, 54]
n = 32
binsearch(arr, n)

标签: pythonbinary-search

解决方案


这里有几个问题:

  1. else块是不可达的,因为 if/elif/elif 涵盖了所有的可能性

print("在 %d 找到的数字"%(t))

不会打印正确答案,因为函数采用切片数组而不是初始数组

  1. 当您尝试获取空数组的第一个元素时出现错误

t=len(arr)//2

如果 arr[t]==n:

这里是 t == 0,arr == []

不建议使用递归进行二分搜索。我建议如何编写它:

def bin_search(arr, n):
    l = 0
    r = len(arr)
    m = (l+r)//2
    while l < r:
        if arr[m] > n:
            r = m
        elif arr[m] < n:
            l = m+1
        else:
            return m
        m = (l+r)//2
arr=[12, 24, 32, 39, 45, 50, 54]
n=32
print(bin_search(arr,n))

推荐阅读