冒泡排序

冒泡法

  1. 冒泡法
    在这里插入图片描述 在这里插入图片描述

    1. 属于交换排序;
    2. 两两比较大小,交换位置,如同冒泡,故称冒泡排序;
    3. 结果分为升序和降序;
  2. 升序

    1. n个数,从左到右,依次两两比较,按双方比较结果决定是否交换位置
    2. 第一轮从0到n-1, 第二轮从0到n-2,每轮比较都产生一个该轮比较的最大值,并将其置于最右侧;
  3. 降序

    1. 和升序相反;
  4. 冒泡排序的实现

num_list = [2,4,5,6,7,1,3]

length = len(num_list)
count_swap = 0
count = 0

for i in range(length):
    flag = False #增强,实现对有序序列的提前退出,当次内层循环结束后,一轮比较下来没有产生交换,判断已经有序,则退出排序
    for j in range(length - i - 1):
        count += 1 #遍历次数
        if num_list[j] > num_list[j + 1]:         
            num_list[j], num_list[j + 1] = num_list[j + 1], num_list[j]
            flag = True
            count_swap += 1 #交换次数
    if not flag:
        break
print(num_list, count, count_swap)

  1. 总结
  • 冒泡法需要一轮轮比较
  • 可以通过设置一个标记判断是否发生了交换,没有则结束,有则进入下一轮排序
  • 最差的情况,初始顺序与目标顺序完全相反,遍历次数1,…,n-1之和n(n-1)/2
  • 最好的情况,初始顺序与目标顺序完全相同,遍历次数n-1
  • 时间复杂度O(n**2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值