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

排序算法——冒泡排序

 一、介绍

「冒泡排序bubblesort」通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。
冒泡过程可以利用元素交换操作来模拟:从数组最左端开始向右遍历,依次比较相邻元素大小,如果“左元素>右元素”就交换它俩。遍历完成后,最大的元素会被移动到数组的最右端。

二、算法流程

设数组的长度为𝑛,冒泡排序的步骤如下图所示。

1. 首先,对𝑛个元素执行“冒泡”,将数组的最大元素交换至正确位置,

2. 接下来,对剩余𝑛−1个元素执行“冒泡”,将第二大元素交换至正确位置。

3. 以此类推,经过𝑛−1轮“冒泡”后,前𝑛−1大的元素都被交换至正确位置。

4. 仅剩的一个元素必定是最小元素,无须排序,因此数组排序完成。

三、代码

def bubble_sort(nums: list[int]):""" 冒泡排序"""n = len(nums)# 外循环:未排序区间为 [0, i]for i in range(n- 1, 0, -1):flag = False  # 初始化标志位# 内循环:将未排序区间 [0, i] 中的最大元素交换至该区间的最右端for j in range(i):if nums[j] > nums[j + 1]:# 交换 nums[j] 与 nums[j + 1]nums[j], nums[j + 1] = nums[j + 1], nums[j]flag = True  # 记录交换元素if not flag:  # 未发生交换,提前退出breaknums = [5, 2, 4, 6, 1, 3]
bubble_sort(nums)
print(nums)

四、算法特性

时间复杂度为𝑂(n^{2})、自适应排序:各轮“冒泡”遍历的数组长度依次为𝑛−1、𝑛−2、…、2、1,总和为(𝑛−1)𝑛/2。在引入flag 优化后,最佳时间复杂度可达到𝑂(𝑛)。
空间复杂度为𝑂(1)、原地排序:指针𝑖和𝑗使用常数大小的额外空间。
稳定排序:由于在“冒泡”中遇到相等元素不交换。

相关文章:

  • C语言学习之动态内存的管理
  • 交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
  • caffe适配cudnn9.6.0(ai修改代码踩坑)
  • synchronized与Lock深度对比
  • 随机森林实战:从原理到垃圾邮件分类
  • Windows下Python3脚本传到Linux下./example.py执行失败
  • AdaBoost算法详解:原理、实现与应用指南
  • 极简GIT使用
  • 补4月30日
  • 常见电源的解释说明
  • C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
  • RTOS接口-Semaphores
  • ADG网络故障恢复演练
  • 实现了一个基于寄存器操作STM32F103C8t6的工程, 并实现对PA1,PA2接LED正极的点灯操作
  • 如何提升个人的稳定性?
  • 蓝桥杯比赛
  • 基于BERT类的MRPC语义相似度检测(从0到-1系列)
  • 机箱结构的EMC设计
  • 5月1日日记
  • Window通过虚拟机17安装Ubuntu20.04并安装相关的插件(胎教级教程)
  • 韩国经济副总理崔相穆宣布辞职
  • 居委业委居民群策群力,7位一级演员来到上海一小区唱戏
  • 国家卫健委对近日肖某引发舆情问题开展调查
  • 网商银行2024年年报发布,客户资产管理规模超过1万亿
  • 习近平在上海考察时强调,加快建成具有全球影响力的科技创新高地
  • 中方会否公布铁线礁的领海基线?外交部:中方执法活动旨在反制菲方侵权挑衅