排序算法(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
相关推荐
玖釉-11 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
不做无法实现的梦~11 小时前
运动控制系统复习一览-----常考题目总结版本
算法
小短腿的代码世界11 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
阿文的代码库11 小时前
一文读懂GROUP BY 1,2 VS GROUP BY column_1, column_2 的区别
算法
欧米欧11 小时前
C++进阶数据结构之搜索二叉树
开发语言·数据结构·c++
小江的记录本11 小时前
【Java基础】反射与注解:核心原理、自定义注解、注解解析方式(附《思维导图》+《面试高频考点清单》)
java·数据结构·python·mysql·spring·面试·maven
008爬虫实战录12 小时前
【码上爬】 题十:魔改算法 堆栈分析,找加密值过程详解
前端·python·算法
chao18984412 小时前
基于狮蚁群算法(ALO)的火电机组功能调度实现
人工智能·算法
Deep-w12 小时前
【MATLAB】含光伏 - 储能的家庭/工业微电网能量管理仿真研究
开发语言·算法·matlab
阿文的代码库12 小时前
换根技巧实例分析:最小高度树
算法·动态规划