例如,
print(binary_search(7, [1, 5, 10])) # 2
print(binary_search(42, (-5, 1, 3, 5, 7, 10))) # 6
我的代码:
def binary_search(x, seq):
if len(seq) == 0
low = 0
high = len(seq)
mid = (low+high)//2
if x == seq[mid]:
return mid
elif x < seq[mid]:
return binary_search(x,seq[:mid])
elif x > seq[mid]:
return mid + 1 + binary_search(x,seq[mid+1:]
答案 0 :(得分:4)
并不多,你错过了第二行的冒号和回复声明以及最后一行的结束声明:
def binary_search(x, seq):
if len(seq) == 0: return 0
low = 0
high = len(seq)
mid = (low+high)//2
if x == seq[mid]:
return mid
elif x < seq[mid]:
return binary_search(x,seq[:mid])
elif x > seq[mid]:
return mid + 1 + binary_search(x,seq[mid+1:])
print(binary_search(7, [1, 5, 10])) # 2
print(binary_search(42, (-5, 1, 3, 5, 7, 10))) # 6
值得注意的是,内置了这个:bisect.bisect_left()
返回值适合用作list.insert()的第一个参数,假设a已经排序。
参数的顺序恰恰相反:
import bisect
print(bisect.bisect_left([1, 5, 10], 7)) # 2
print(bisect.bisect_left((-5, 1, 3, 5, 7, 10), 42)) # 6