排序算法(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
相关推荐
Mr.H012730 分钟前
快速排序的常见构思
数据结构·算法
mit6.82437 分钟前
背包dp|格雷码
算法
rit84324991 小时前
基于MATLAB的PCA+SVM人脸识别系统实现
人工智能·算法
RTC老炮1 小时前
webrtc降噪-NoiseEstimator类源码分析与算法原理
算法·webrtc
懒羊羊不懒@1 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
不当菜鸡的程序媛2 小时前
Flow Matching|什么是“预测速度场 vt=ε−x”?
人工智能·算法·机器学习
sali-tec3 小时前
C# 基于halcon的视觉工作流-章58-输出点云图
开发语言·人工智能·算法·计算机视觉·c#
_OP_CHEN3 小时前
算法基础篇:(四)基础算法之前缀和
c++·算法·前缀和·蓝桥杯·acm·icpc·算法竞赛
_OP_CHEN3 小时前
算法基础篇:(五)基础算法之差分——以“空间”换“时间”
c++·算法·acm·icpc·算法竞赛·差分算法·差分与前缀和
DuHz3 小时前
霍夫变换和基于时频脊线的汽车FMCW雷达干扰抑制——论文阅读
论文阅读·物联网·算法·汽车·信息与通信·毫米波雷达