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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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最大的设计失误
· 单元测试从入门到精通