day15 算法 : 二分法(1)


算法:是高效解决问题的办法
算法之二分法

需求:有一个按照从小到大顺序排列的数字列表
需要从该数字列表中找到我们想要的那个一个数字
如何做更高效???


# 我们需要找到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
原文地址:https://www.cnblogs.com/kwkk978113/p/13348169.html