二分查找算法

 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
View Code

 

posted @ 2018-09-16 22:20  _小溢  阅读(152)  评论(0)    收藏  举报