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) // 217 # 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 end31 mid_index = (end - start) // 2 + start32 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_index40 else: # 找不到应该返回离这个数最近的一个数怎么样?41 print('找不到')42 return 043 44 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 55, 60, 80, 90]45 46 print(find(l, 60)) # 12