冒泡排序-python实现

本文详细介绍了冒泡排序算法的工作原理,步骤示例,以及其在Python中的实现。特别指出冒泡排序的时间复杂度较高,不适合大规模数据排序。
摘要由CSDN通过智能技术生成

冒泡排序 是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,即数列已经排序完成。

具体步骤如下:

比较相邻的元素,如果前一个比后一个大(升序),就交换这两个元素的位置。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
对于序列[4, 3, 8,1]将其升序排序,冒泡排序的过程是这样的:

第一轮:(4,3), (4,8), (8,1),得到[3, 4, 1, 8]
第二轮:(3,4), (4,1),得到[3, 1, 4, 8]
第三轮:(3,1), (3,4),得到[1, 3, 4, 8]
第四轮:没有进行交换,序列保持不变

冒泡排序的时间复杂度较高,为O(n^2),不适用于大规模数据的排序。

Python代码实现

def bubble_sort(li: list) -> list:
    """冒泡排序 升序"""
    for i in range(len(li) - 1):  # 决定遍历多少趟, n-1趟
        flag = False  # 标识 是否进行元素交换,未发生交换则表明数组已然是有序得了,后续就不在执行剩余的趟
        for j in range(len(li) - i - 1):  # 相邻两元素的索引,不大于n-1,且为无序区长度-1
            if li[j] > li[j + 1]:
                li[j], li[j + 1] = li[j + 1], li[j]
                flag = True
        if not flag:
            return
        print('第' + str(i) + '趟:', li)


if __name__ == '__main__':
    # nums = [1, 5, 8, 9, 10, 4, 6, 13, 0]    # 执行全部n-1趟
    nums = [0, 1, 2, 3, 6, 5]    # 执行第0趟,数组已经有序,便不再进行后续趟数的判断元素大小以及交换
    print('原数组:', nums)
    bubble_sort(nums)

# 输出结果
原数组: [0, 1, 2, 3, 6, 5]0趟: [0, 1, 2, 3, 5, 6]

原数组: [1, 5, 8, 9, 10, 4, 6, 13, 0]0趟: [1, 5, 8, 9, 4, 6, 10, 0, 13]1趟: [1, 5, 8, 4, 6, 9, 0, 10, 13]2趟: [1, 5, 4, 6, 8, 0, 9, 10, 13]3趟: [1, 4, 5, 6, 0, 8, 9, 10, 13]4趟: [1, 4, 5, 0, 6, 8, 9, 10, 13]5趟: [1, 4, 0, 5, 6, 8, 9, 10, 13]6趟: [1, 0, 4, 5, 6, 8, 9, 10, 13]7趟: [0, 1, 4, 5, 6, 8, 9, 10, 13]
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值