方法一:
循环
def BinarySearch(lista, key):
min = 0
max = len(lista) - 1
while True:
mid = (min + max) // 2
if key < lista[0] or key > lista[-1]:
return None
if lista[mid] > key:
max = mid - 1 # max = mid 效果不一样
elif lista[mid] < key:
min = mid + 1 # min = mid 效果不一样
else:
print(str(key) + "在数组的第" + str(mid))
return lista[mid]
a = [1, 2, 2, 3, 4, 4, 5, 6, 6, 8, 9, 11, 15]
c = BinarySearch(a, 6)
print(c)
方法二:
递归
def binary_search(lis, left, right, num):
if left > right: # 递归结束条件
return None
mid = (left + right) // 2
if num < lis[mid]:
right = mid - 1
elif num > lis[mid]:
left = mid + 1
else:
return mid
return binary_search(lis, left, right, num)
a = [1, 2, 2, 3, 4, 4, 5, 6, 6, 8, 9, 11, 15]
c = binary_search(a, 0, len(a) - 1, 16)
print(c)