• 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
  • 相关阅读:
    算术入门之加减乘除
    scanf的返回值
    Flutter 开发环境配置
    DbContextOptionsBuilder
    MarkDown 的简单用法
    C# 多线程安全集合类
    .NET Core 中使用 MemoryCache 缓存
    JWT
    什么是跨域?跨域解决方法
    .Net Core 中配置的高级用法
  • 原文地址:https://www.cnblogs.com/kwkk978113/p/13348169.html
Copyright © 2020-2023  润新知