排序算法(1):冒泡排序

问题

排序 [30, 24, 5, 58, 18, 36, 12, 42, 39]

冒泡排序

冒泡排序通过多次遍历待排序列表,每次比较相邻两个元素,如果顺序错误就将它们交换过来,重复进行直到没有需要交换的元素,排序完成。

图解

  1. 第一轮排序:遍历全部元素,依次比较相邻元素,直到将最大的元素交换到最后一位。

  2. 第二轮排序,遍历待排序元素,依次比较相邻元素,将最大的元素交换到待排序列表的最后一位。

  3. 继续遍历直到所有元素被交换到正确位置时结束。

代码

py 复制代码
def bubble_sort(nums):
    n = len(nums)

    for i in range(n -1):	# 外循环
        for j in range(n-1-i):		# 内循环
            if nums[j] > nums[j+1]:		# 顺序错误时交换
                nums[j], nums[j+1] = nums[j+1], nums[j]		

    return nums

时间复杂度

冒泡排序的时间复杂度为 O(n2)

算法优化

增加一个标志位 flag,若在某轮内循环中没有进行任何交换操作,表示数组已经完成排序,可以直接返回结果。

py 复制代码
def bubble_sort(nums):
    n = len(nums)

    for i in range(n -1):	# 外循环
    	flag = False
        for j in range(n-1-i):		# 内循环
            if nums[j] > nums[j+1]:		# 顺序错误时交换
                nums[j], nums[j+1] = nums[j+1], nums[j]	
                flag = True	
		if not flag: break
		
    return nums
相关推荐
咖丨喱10 分钟前
IP校验和算法解析与实现
网络·tcp/ip·算法
罗湖老棍子23 分钟前
括号配对(信息学奥赛一本通- P1572)
算法·动态规划·区间dp·字符串匹配·区间动态规划
fengfuyao9851 小时前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心1 小时前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
一只小小的芙厨1 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
庄周迷蝴蝶1 小时前
四、CUDA排序算法实现
算法·排序算法
以卿a1 小时前
C++(继承)
开发语言·c++·算法
I_LPL1 小时前
day22 代码随想录算法训练营 回溯专题1
算法·回溯算法·求职面试·组合问题
金融RPA机器人丨实在智能1 小时前
2026动态规划新风向:实在智能Agent如何以自适应逻辑重构企业效率?
算法·ai·重构·动态规划
Mr Xu_1 小时前
告别硬编码:前端项目中配置驱动的实战优化指南
前端·javascript·数据结构