zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Hive、Presto、Kylin、Impala、Sparksql、Druid 区别
    HIVE vs HBASE
    mysql vs mongodb
    关于MCU 开门狗要求
    JAVA转OC j2objc
    DTD文件映射
    装饰者模式(Decorator)
    Spring Boot 概述
    C语言也会短路?盘点C语言中那些令人匪夷所思的情况!
    程序员的天梯排行榜!你的理想高度在哪里?
  • 原文地址:https://www.cnblogs.com/kwkk978113/p/13348169.html
Copyright © 2011-2022 走看看