算法:是高效解决问题的办法
算法之二分法
需求:有一个按照从小到大顺序排列的数字列表
需要从该数字列表中找到我们想要的那个一个数字
如何做更高效???
# 我们需要找到3这是值 常用方法是直接进行整体遍历
# 但是如果列表过多会存在内存不足的情况
#方案一:
nums=[-3,-2,-1,0,1,2,3,4,5,6,7,8,9]
find_num=3
for num in nums:
if num ==find_num:
print("find it %s" % num )
break
# 方案二: 二 分 法 的 步 骤 如 下 : 函数内使用的是递归
# def binary_search(find_num,列表):
# mid_val=找列表中间的值
# if find_num > mid_val:
# # 接下来的查找应该是在列表的右半部分
# 列表=列表切片右半部分
# binary_search(find_num,列表)
# elif find_num < mid_val:
# # 接下来的查找应该是在列表的左半部分
# 列表=列表切片左半部分
# binary_search(find_num,列表)
# else:
# print('find it')
nums=[-3,-2,-1,0,1,2,3,4,5,6,7,8,9]
find_num=1
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 %s' % num)
binary_search(find_num,nums)
# 输出结果 如下:
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[-3, -2, -1, 0, 1, 2]
[1, 2]
[1]
find it 1