zoukankan      html  css  js  c++  java
  • python 算法之查找算法实例

    一、查找算法

    需求:从指定列表中查到一个元素

    先定义一个列表,需要查到的元素是 105

    l = [1,3,4,6,10,33,36,45,49, 66, 77, 78, 79, 90, 96, 105, 312, 644, 647] 

    1、顺序查找(从头到尾查找,查到就停止,效率低)

    def fun1(l, num):
        n = 0
        for i in l:
            n += 1
            print ("count: ", n)
            if i == num:
                return l.index(i)
        return -1

    2、二分查找,也叫拆半查找(要求序列必须是顺序的,会将被查找元素先与序列最中间的元素比较,如果小于中间元素,则向左半部分查找,否则向右半部分查找,递归下去。效率高,平均性能好)

    def fun2(l, num):
        n = 0
        low = 0
        hight = len(l)-1
    
        while low <= hight:
            n += 1
            mid = (low+hight)//2
            print ("count: ", n)
            if num == l[mid]:
                return mid
            elif num < l[mid]:
                hight = mid - 1
            else:
                low = mid + 1
        return -1

    两者输出比较,顺序查找算法用了16次查到该元素,二分查找算法只用了4次,差距明显

    count:  1
    count:  2
    count:  3
    count:  4
    count:  5
    count:  6
    count: ...
    count:  15
    count:  16
    15
    count:  1
    count:  2
    count:  3
    count:  4
    15
  • 相关阅读:
    Redis常见数据类型
    MYSQL常见可优化场景
    算术切片
    找数组里没出现的数
    不同路径和(II)
    不同路径和
    最小路径和
    强盗抢房子
    丑数(2)
    判断子序列
  • 原文地址:https://www.cnblogs.com/sqtu/p/10573359.html
Copyright © 2011-2022 走看看