python - 这个二分搜索有什么问题?
问题描述
这个二进制搜索 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)
解决方案
这里有几个问题:
- else块是不可达的,因为 if/elif/elif 涵盖了所有的可能性
print("在 %d 找到的数字"%(t))
不会打印正确答案,因为函数采用切片数组而不是初始数组
- 当您尝试获取空数组的第一个元素时出现错误
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))
推荐阅读
- r - 重新运行直到没有 NA 发生
- python - 使用 diff 时 Pandas 中的 SettingWithCopyWarning
- python - 使用 get_dummies 创建虚拟对象。将虚拟数据帧连接到原始数据帧 df 导致行消失
- python - 即使对于 128 GB 的内存,图形聚类也会出现内存错误。为什么?
- python - ansible convert escaped json string to json
- c++ - 抛出异常:读取访问冲突。**这**是 0x40 错误
- python - 模块在 PP 中显示时,VENV 中的 ImportError
- c++ - 与 std::bind 相对,为给定参数传入不同的函数
- python - 修复“pyproj import _datadir”错误:找不到指定的模块
- scripting - Deno:如何替换 npm 脚本(package.json)