python实现冒泡排序完整算法_冒泡排序算法代码(使用Python实现)

问题描述

记得刚刚接触算法的时候觉得特别难以理解.最初接触的是冒泡排序 🤣 但是现在看一遍马上知道怎么回事,以及想到如何代码实现.

就像是咕噜咕噜冒泡泡一样.每次都是最大的泡泡冒到最上面.查看动画是最好理解的算法的方式之一.请参看:冒泡排序动画演示

关于冒泡排序的特性:冒泡排序的对比时间复杂度是O(n^2) 交换时间复杂度是O(n^2).最优的排序算法时间比较复杂度为O(logn)

冒泡排序的适应性相对来说比较广泛.链式结构也可以使用.冒泡排序的优势是无需任何额外的储存开销.选择排序从排序思维上来说,则是冒泡排序的性能优化版本

思路

冒泡排序的算法思路在于对无序表进行多趟比较交换,

每趟包括了多次两两相邻比较,并将逆序的数据项互换位置,最终能将本趟的最大项就位

一共需要n-1趟比较交换,实现整表排序

可以形象的理解为:水底的泡泡需要往上面冒.最大的泡泡先冒出去.冒出去的时候要和他的每个小弟打招呼,换换位置.好离水面最近.

比对的时间复杂度是O(n2),关于交换次数,时间复杂度也是O(n2).此外关于优化版本的冒泡排序的时间复杂度最佳可以是O(n).这种情况是在需要进行排序的表本身已经是有序表的情况下.本身已经不需要排序了.

但是经过实际测试:循环次数可以降低,但是由于需要赋值与判断操作,排序需要的实际时间反而增加了.(测试数据有十万个)

动画

1803537-20200326094059448-477972678.gif

冒泡排序

def bubbleSort(alist):

for pass_num in range(len(alist)-1,0,-1): # 比对次数

for i in range(pass_num):

if alist[i+1] < alist[i]:

alist[i],alist[i+1] = alist[i+1] ,alist[i]

return alist

print(bubbleSort([21,312,321,321,54,654,423,12,32,312]))

优化版本

优化的内容具体体现在 : 如果发现一轮比较当中,没有发生元素之间相互交换,则是意味着元素已经排序完毕.可以终止掉后面的排序循环.使用exchangs进行监控

def bubbleSort_II(alist): # 性能改进

exchanges = True #进行监控的变量

pass_num = len(alist) - 1

while pass_num >0 and exchanges:

exchanges = False

for i in range(pass_num):

if alist[i+1] < alist[i]:

exchanges = True

alist[i],alist[i+1] = alist[i+1] ,alist[i]

pass_num = pass_num -1

return alist

print(bubbleSort([21,312,321,321,54,654,423,12,32,312]))

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值