排序算法(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
相关推荐
燃于AC之乐1 小时前
我的算法修炼之路--4 ———我和算法的爱恨情仇
算法·前缀和·贪心算法·背包问题·洛谷
MM_MS7 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
独自破碎E7 小时前
【二分法】寻找峰值
算法
mit6.8247 小时前
位运算|拆分贪心
算法
ghie90908 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体18 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9988 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
Z1Jxxx8 小时前
加密算法加密算法
开发语言·c++·算法
乌萨奇也要立志学C++8 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
vyuvyucd9 小时前
C++引用:高效编程的别名利器
算法