【发布时间】:2012-03-19 01:40:27
【问题描述】:
我正在尝试在 python 中实现二进制搜索,并将其编写如下。但是,只要 needle_element 大于数组中的最大元素,我就无法让它停止。
你能帮忙吗?谢谢。
def binary_search(array, needle_element):
mid = (len(array)) / 2
if not len(array):
raise "Error"
if needle_element == array[mid]:
return mid
elif needle_element > array[mid]:
return mid + binary_search(array[mid:],needle_element)
elif needle_element < array[mid]:
return binary_search(array[:mid],needle_element)
else:
raise "Error"
【问题讨论】:
-
我会尽量避免创建数组的大量部分副本,而是传入一个较低和较高的索引。然后,如果 lower>upper,您只需停止。
-
如果这样做的目的是对 binsearch 的学术理解,我真的无能为力,但如果这段代码的目的是实际使用:永远不要滚动你自己的 binsearch。始终使用被广泛采用,最好是旧的库实现,即使这样也要非常小心,众所周知,binseach 在所有边缘情况下都很难正确处理。
标签: python algorithm binary-search