冒泡排序bubble sort

ops/2024/9/24 7:38:43/

冒泡排序(bubble sort)通过连续地比较与交换相邻元素实现排序。这个过程就像气泡从底部升到顶部一样,因此得名冒泡排序。
算法流程
在这里插入图片描述
在这里插入图片描述

def bubble_sort(nums: list[int]):"""冒泡排序"""n = len(nums)# 外循环:未排序区间为 [0, i]for i in range(n - 1, 0, -1):# 内循环:将未排序区间 [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]

效率优化
在这里插入图片描述

def bubble_sort_with_flag(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:break  # 此轮“冒泡”未交换任何元素,直接跳出
class Solution:def bubbleSort(self, nums: [int]) -> [int]:# 第 i 趟「冒泡」for i in range(len(nums) - 1):flag = False    # 是否发生交换的标志位# 从数组中前 n - i + 1 个元素的第 1 个元素开始,相邻两个元素进行比较for j in range(len(nums) - i - 1):# 相邻两个元素进行比较,如果前者大于后者,则交换位置if nums[j] > nums[j + 1]:nums[j], nums[j + 1] = nums[j + 1], nums[j]flag = Trueif not flag:    # 此趟遍历未交换任何元素,直接跳出breakreturn numsdef sortArray(self, nums: [int]) -> [int]:return self.bubbleSort(nums)

算法特性
在这里插入图片描述


http://www.ppmy.cn/ops/115184.html

相关文章

ubuntu、linux安装redis(使用tar包的方式)

目录 1、准备redis的tar包 2、执行make 3、执行make install 4、运行redis 5、总结 1、准备redis的tar包 去官网或者github上下载对应的tar包,我下载的是 redis-6.2.14.tar.gz 上传到ubuntu后,使用指令进行解压: tar -xvf redis-6.2.14.t…

【软件造价咨询】软件每年运维费用取开发费用百分之几合适

应用软件的运维费用相对于系统开发建设费用的占比因项目而异,但可以通过一些行业标准和基准数据来进行估算。根据北京软件造价评估联盟2020至2023年发布的《中国软件行业基准数据》CSBMK文件,在这项文件中用百分位数统计列出了“应用软件运维费用占比”的…

MapReduce基本原理

目录 整体执行流程​ Map端执行流程 Reduce端执行流程 Shuffle执行流程 整体执行流程 八部曲 读取数据--> 定义map --> 分区 --> 排序 --> 规约 --> 分组 --> 定义reduce --> 输出数据 首先将文件进行切片(block)处理&#xff…

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分…

LabVIEW软件出现Bug如何解决

在LabVIEW开发中,程序出现bug是不可避免的。无论是小型项目还是复杂系统,调试与修复bug都是开发过程中的重要环节。下文介绍如何有效解决LabVIEW软件中的bug,包括常见错误类型、调试工具、错误处理机制。 1. 常见Bug类型分析 在LabVIEW中&am…

RHCS认证-Linux(RHel9)-Ansible

文章目录 一、ansible 简介二 、ansible部署三、ansible服务端测试四 、ansible 清单inventory五、Ad-hot 点对点模式六、YAML语言模式七、RHCS-Ansible附:安装CentOS-Stream 9系统7.1 ansible 执行过程7.2 安装ansible,ansible-navigator7.2 部署ansibl…

Windows系统的Tomcat日志路径配置

文章目录 引言I Windows系统的Tomcat日志路径配置配置常规日志路径访问日志路径配置,修改server.xmlII 日志文件切割:以分隔割tomcat 的 catalina.out 文件为例子通过Linux系统自带的切割工具logrotate来进行切割引言 需求:C盘空间不足,处理日志文件,tomcat日志迁移到D盘…

Teams会议侧边栏应用开发-会议转写

Teams应用开发,主要是权限比较麻烦,大量阅读和实践,摸索了几周,才搞明白。现将经验总结如下: 一、目标:开发一个Teams会议的侧边栏应用,实现会议的实时转写。 二、前提: 1&#x…