这是我的二分搜索。 mid不会更新,无限循环。
def binary_search (z, A, start, end):
if len(A) == 0:
return None
else:
mid = start + (end - start) / 2
if (z < A[mid]) and (z > A[mid-1]):
return A[mid-1]
elif (z < A[mid]):
return binary_search(z, A, start, mid)
elif (z > A[mid]):
return binary_search(z, A, mid, end)
答案 0 :(得分:1)
def binary_search (z, A, start, end):
if end < start:
return None
else:
mid = start + (end - start) / 2
if (z < A[mid]):
return binary_search(z, A, start, mid-1)
elif (z > A[mid]):
return binary_search(z, A, mid+1, end)
else:
return mid
我改变了一些事情。
我首先检查更改了end < start:
,因为if len(A) == 0:
将保持不变,并且不允许您将其用作基本案例。
此外,当您返回二进制搜索时,您需要跳过中间值,因为那是您要返回的值。
我测试了代码,但它确实有效!