1 # 算法
2 # 查找算法
3 # 排序算法
4 # 最短路径算法
5 # 等等
6
7
8
9 # 二分查找算法 必须处理有序的
10
11 # 如果有这样一个列表,让你从这个列表中找到66的位置,你怎么做?
12 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 55, 60, 80, 90]
13
14 # # 代码实现
15 # def find(l, aim):
16 # mid_index = len(l) // 2
17 # if l[mid_index] < aim:
18 # new_l = l[mid_index + 1 :]
19 # find(new_l, aim)
20 # elif l[mid_index] > aim:
21 # new_l = l[:mid_index]
22 # find(new_l, aim)
23 # else:
24 # print('找到了', mid_index, l[mid_index])
25 #
26 # find(l, 60)
27
28 # 正确的二分法,第一个参数所查找的容器,第二个参数为要找的目标,第三第四为开始与结束位置
29 def find(l, aim, start = 0, end = None):
30 end = len(l) if end is None else end
31 mid_index = (end - start) // 2 + start
32 if start <= end:
33 if l[mid_index] < aim:
34 return find(l, aim, start = mid_index + 1, end = end )
35 elif l[mid_index] > aim:
36 return find(l, aim, start = start, end = mid_index - 1)
37 else:
38 print('扎到了', mid_index, l[mid_index])
39 return mid_index
40 else: # 找不到应该返回离这个数最近的一个数怎么样?
41 print('找不到')
42 return 0
43
44 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 55, 60, 80, 90]
45
46 print(find(l, 60)) # 12