【发布时间】:2013-11-16 19:47:59
【问题描述】:
我正在尝试编写一个二进制搜索,它采用排序列表并找到小于目标值的最大数字:
def binary_max(list, target)
hi=len(list)-1
lo=0
while lo<=hi:
mid=(hi+lo)//2
midval=list[mid]
if midval > target:
hi=mid-1
elif midval <= target:
lo=mid
if hi==lo:
break
return(list[mid])
pass
但是,例如,当有一个长度为 2 的列表时,hi=1 并且中间值将始终停留在 lo 有没有办法避免这个问题?
谢谢
【问题讨论】:
-
这听起来可能很傻,但是:您能否更新您的问题以包含完整的函数和调用它的代码?
-
while循环在 Python 中是惯用的,除非它是无限循环 (while True) -
@PauloScardine,但是如果你查看
bisect.py... -
@gnibbler:这个模块看起来像 C 翻译成 Python,但我想不出更好的算法。 :-)
标签: python binary-search