二分法
算法
是高效解决问题的办法
用于某种特定的场景
算法之 二分法
需求:有一个按照从小到大顺序排列的数字列表,需要从该数字列表中找到我们想要的那个数字,如何做更高效???
方案1:整体遍历,效率太低
nums = [-3,4,7,10,13,21,43,77,89]
find_num = 10
for num in nums:
if num == find_num:
print('find it')
break
方案2:二分法
# 思路
# def binary_search(find_num,列表):
# mid_value = 找列表中间的值
# if find_num > mid_value:
# # 接下来的查找应该是列表的右半部分
# # 列表 = 列表切片 切出右半部分
# # 本身的代码(列表)
# binary_search(find_num,列表)
# elif find_num < mid_value:
# # 接下来的查找应该是列表的左半部分
# # 列表 = 列表切片 切出左半部分
# # 本身的代码(列表)
# binary_search(find_num,列表)
# else:
# print('find it')
nums = [-3, 4, 7, 10, 13, 21, 43, 77, 89]
find_num = 10
def binary_search(find_num, l):
print(l)
if len(l) == 0:
print('找的值不存在')
return
mid_index = len(l) // 2
if find_num > l[mid_index]:
# 接下来的查找应该是列表的右半部分
# 列表 = 列表切片 切出右半部分
l = l[mid_index + 1:]
# 本身的代码(列表)
binary_search(find_num, l)
elif find_num < l[mid_index]:
# 接下来的查找应该是列表的左半部分
# 列表 = 列表切片 切出左半部分
l = l[:mid_index]
# 本身的代码(列表)
binary_search(find_num, l)
else:
print('find it')
binary_search(find_num, nums)