当前位置: 首页 > news >正文

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

问题

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

冒泡排序

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

图解

  1. 第一轮排序:遍历全部元素,依次比较相邻元素,直到将最大的元素交换到最后一位。
    在这里插入图片描述

  2. 第二轮排序,遍历待排序元素,依次比较相邻元素,将最大的元素交换到待排序列表的最后一位。
    在这里插入图片描述

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

代码

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,若在某轮内循环中没有进行任何交换操作,表示数组已经完成排序,可以直接返回结果。

def bubble_sort(nums):n = len(nums)for i in range(n -1):	# 外循环flag = Falsefor 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: breakreturn nums

http://www.mrgr.cn/news/79595.html

相关文章:

  • FireFox火狐浏览器企业策略禁止更新
  • AI 学习框架:开启智能未来的钥匙
  • CSS的2D和3D动画效果
  • Simdroid-EC:液冷仿真新星,助力新能源汽车电机控制器高效散热
  • SpringBoot中使用MyBatis-Plus详细介绍
  • SpringCloud微服务开发(二)Nacos
  • STM32F103 FPGA进行通信方式
  • 第四十六篇 Vision Transformer论文翻译
  • 【开源】A065—基于SpringBoot的库存管理系统的设计与实现
  • java中的抽象类
  • Redis安装和Python练习(Windows11 + Python3.X + Pycharm社区版)
  • 人工智能大模型LLM开源资源汇总(持续更新)
  • 【光电倍增管】-打拿极 PMT
  • SpringBoot3整合Druid数据源
  • 配置新电脑设置的脚本
  • 嵌入式入门Day26
  • android NumberPicker隐藏分割线或修改颜色
  • android notification
  • Python 检验项目分析与历次报告比对
  • SpringBoot3整合SpringMVC
  • 制造业信息化系统:构建高效生产与管理的数字化基石
  • 阿里云 云产品流转(实现设备与小程序交互)
  • c++ 学习笔记 函数进阶
  • Python知识分享第二十二天-数据结构入门
  • LEGO-GraphRAG框架-图谱检索增强生成框架介绍
  • Ubuntu 安装 web 服务器