八大排序算法之冒泡排序(python)

冒泡排序算法的原理:
比较相邻的元素,如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或
降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒
泡排序”。

以[9,5,4,3,2]为例:
第一轮:

第一次:9>5===>[5,9,4,3,2]
第二次:9>4===>[5,4,9,3,2]
第三次:9>3===>[5,4,3,9,2]
第四次:9>2===>[5,4,3,2,9]
第一轮排序结果:[5,4,3,2,9]

第二轮:
第一次:5>4===>[4,5,3,2,9]
第二次:5>3===>[4,3,5,2,9]
第三次:5>2===>[4,3,2,5,9]
第二轮排序结果:[4,3,2,5,9]

第三轮:
第一次:4>3===>[3,4,2,5,9]
第二次:4>2===>[3,2,4,5,9]
第三轮排序结果:[3,2,4,5,9]

第四轮:
第一次:3>2===>[2,3,4,5,9]
第四轮排序结果:[2,3,4,5,9]

总结:
1.对一个长度为n的数组排序,需要排n-1轮;
2.第i轮排序,需要n-1-i次;

算法:
1.使用for循环控制排序的轮数,数组的长度为n,排序的轮数为n-1;
2.使用内嵌for循环控制每轮排序的次数,n-1-k,k为第k轮排序;
3.如果arr[i]>arr[i+1],arr[i+1]与arr[i]位置调换;
4.外层循环结束,返回数组

代码实现:

def bubble(arr):
    n=len(arr)
    for k in range(n-1):
        for i in range(n-1-k):
            print("第%d轮第%d次排序前:"%(k+1,i+1),arr)
            if arr[i]>arr[i+1]:
                arr[i],arr[i+1]=arr[i+1],arr[i]
            print("第%d轮第%d次排序后:"%(k+1,i+1),arr)
    return arr

时间复杂度:
冒泡排序一共遍历了n-1 + n-2 + … + 2 + 1 = n * (n-1) / 2 = (n2- n)/2次, 最大的影响
因子是n2 因此冒泡排序总的平均时间复杂度为 O(n2)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值