迭代实现:
def dichotomy_iter(L,find_num,left,right):
# 取中间值的索引
middle=(left+right)//2
if L[middle]==find_num:
return middle
if left>right:
return -1
if L[middle]>find_num:
return dichotomy_iter(L,find_num,left,middle)
if L[middle]<find_num:
return dichotomy_iter(L,find_num,middle,right)
调用:
L=[1,2,3,4,5,8,16,20,30,40,60,70,1112,1231]
print(dichotomy_iter(L,40,0,len(L)))
循环实现:
def dichotomy_loop(list, key):
left = 0 # 左边界
right = len(list) - 1 # 右边界
while left <= right:
mid = (left + right) // 2 # 取得中间索引
if key > list[mid]:
left = mid + 1
elif key < list[mid]:
right = mid - 1
else:
return mid
else:
return -1
调用:
L=[1,2,3,4,5,8,16,20,30,40,60,70,1112,1231]
print(dichotomy_loop(L,40))