

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