# 算法:高效解决问题的方法
# 算法之二分法
# 需求:有一个按照从小到大顺序排列的数字列表
# 需要从该数字列表中找到一个我们需要的数字,如何做更加高效
nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]
find_num = 13
# 方法1:整体遍历效率低
# for num in nums:
# if num == find_num:
# print("ok")
# break
# 方法2:二分法
def findnums(find_num, l):
print(l)
if len(l) == 0:
print("找的值不存在")
return
if find_num < l[int(len(l) / 2)]: # 实质上可以采用地板除 // 往下取整 print(3//2) 1
# 在列表中左侧继续找,将列表切片操作,保留左边
new_nums = l[0: int(len(l) / 2)]
findnums(find_num, new_nums)
elif find_num > l[int(len(l) / 2)]:
# 在列表中右侧继续找,将列表切片操作,保留右边
new_nums = l[int(len(l) / 2) + 1:]
findnums(find_num, new_nums)
# elif find_num == l[int(len(l) / 2)]:
# print("find ok")
else:
print("find ok")
findnums(7, nums)