随笔 - 27  文章 - 2  评论 - 0  阅读 - 25912

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
复制代码

 

posted on   杜景喜  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示