Python 算法之冒泡排序
冒泡排序基本思想
对于列表a依次比较两个相邻元素的大小,若a[j]大于a[j+1]则进行交换,第一趟把最大的数换到最后,依次类推生成有序的列表。
N个元素的列表要排序完成,需N-1趟排序(例:如果N是3(a = [10,5,2]),那么需要2趟依次把10和5进行移动生成有序列表[2,5,10])。
每一趟排序,就会少比较一次,因为每进行一趟排序都会找出余下列表中的一个较大值
每i趟的排序次数为(N-i-1)次,可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
冒泡排序默认升序排列,如果需要降序则把内层循环中的>号改成<号
a = [10,5,2,4,1,0] c = 0 print(" %s" % a) for i in range(len(a)-1): print("Outer Loop:%d" % i) for j in range(len(a)-1-i): print(" Inner Loop:%d" % j) if a[j] > a[j+1]: a[j+1], a[j] = a[j], a[j+1] print(" %s" % a) c += 1 print(c)
输出结果:
[10, 5, 2, 4, 1, 0] Outer Loop:0 Inner Loop:0 [5, 10, 2, 4, 1, 0] Inner Loop:1 [5, 2, 10, 4, 1, 0] Inner Loop:2 [5, 2, 4, 10, 1, 0] Inner Loop:3 [5, 2, 4, 1, 10, 0] Inner Loop:4 [5, 2, 4, 1, 0, 10] Outer Loop:1 Inner Loop:0 [2, 5, 4, 1, 0, 10] Inner Loop:1 [2, 4, 5, 1, 0, 10] Inner Loop:2 [2, 4, 1, 5, 0, 10] Inner Loop:3 [2, 4, 1, 0, 5, 10] Outer Loop:2 Inner Loop:0 [2, 4, 1, 0, 5, 10] Inner Loop:1 [2, 1, 4, 0, 5, 10] Inner Loop:2 [2, 1, 0, 4, 5, 10] Outer Loop:3 Inner Loop:0 [1, 2, 0, 4, 5, 10] Inner Loop:1 [1, 0, 2, 4, 5, 10] Outer Loop:4 Inner Loop:0 [0, 1, 2, 4, 5, 10] 15
冒泡算法时间复杂度:
最优时间复杂度O(n) :正序情况,只需要一次外层循环,n-1次比较
最坏时间复杂度O(n2):逆序情况,需要n-1一次外层循环,每i趟外层循环执行n-1-i次内层循环
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)