day17 二分查找
# 什么叫算法 # 计算的方法 # 99 * 13 = 1287 = 13 * 100 - 13 # 查找 : 找数据 # 排序 : # 最短路径 # 我们学习的算法,都是过去时 # 了解基础的算法,才能创造出更好的算法 # 不是所有的事情都能套用现成的方法解决的 # 有些时候会用到学过的算法知识来解决新的问题 # 二分查找算法 # 必须处理有序的列表 # L = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88] # 代码实现 # def find(L, aim): # mid_index = len(L) // 2 # if L[mid_index] < aim: # new_L = L[mid_index + 1:] # find(new_L, aim) # elif L[mid_index] > aim: # new_L = L[:mid_index] # find(new_L, aim) # else: # print('find it',mid_index, L[mid_index]) # # # find(L, 66) L = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88] # def find(l, aim, start=0, end=None): # end = len(l) if end is None else end # 001
# 001:写在函数定义时的形参,所能赋的值,只能是在定义函数前已经存在的值。
# mid_index = (start + end) // 2 # 计算中间值,向下取整 # if start <= end: # if l[mid_index] < aim: # find(l, aim, start=mid_index + 1, end=end) # elif l[mid_index] > aim: # find(l, aim, start=start, end=mid_index - 1) # else: # print('Find it in position', mid_index, aim) # else: # print("Can find it") def find(l, aim, start=0, end=None): end = len(l) if end is None else end # 001 mid_index = (start + end) // 2 # 计算中间值,向下取整 if aim <= l[-1]: if start <= end: if l[mid_index] < aim: return find(l, aim, start=mid_index + 1, end=end) elif l[mid_index] > aim: return find(l, aim, start=start, end=mid_index - 1) else: return mid_index else: return "Can't be find in this list" else: return None # 用None来修正超出列表范围的数 Aim = input("请输入待查找的数:") #可手动输入待查询的数 Aim = int(Aim) ret = find(L, Aim) if ret is not None: print("The aim's position is", ret) else: print("This number is out of range")