1 # 为了返回找到列表的下标,故而携带两个参数
2 def binary_search(num, my_list, left, right):
3 if left == right:
4 return left if my_list[left] == num else f'没找到{num}'
5 mid = (right+left) // 2
6 mid_num = my_list[mid]
7 if num == mid_num:
8 return mid
9 elif num > mid_num:
10 return binary_search(num, my_list, mid+1, right)
11 else:
12 return binary_search(num, my_list, left, mid-1)
13
14
15 # 二分查找的循环实现
16 def while_binary_search(num, lis):
17 left = 0
18 right = len(lis) - 1
19 while True:
20 if left == right:
21 return left if lis[left] == num else f'没找到{num}'
22 mid = (left+right) // 2
23 mid_num = lis[mid]
24 if mid_num == num:
25 return mid
26 elif mid_num > num:
27 right = mid - 1
28 else:
29 left = mid + 1
30
31
32 if __name__ == '__main__':
33 my_list = [0, 1, 5, 7, 10, 11, 15, 18, 19]
34 # print(binary_search(10, my_list, 0, len(my_list)-1))
35 print(while_binary_search(15, my_list))