二分法

算法

是高效解决问题的办法

用于某种特定的场景

算法之 二分法

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

方案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)

 

思维导图(点击链接

posted @ 2020-05-29 08:28  mini猪猪侠  阅读(156)  评论(0编辑  收藏  举报