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")
原文地址:https://www.cnblogs.com/77-is-here/p/10668930.html