Python中排序算法之冒泡排序

server/2024/10/18 14:26:01/

排序算法是将给定的数列中的数进行升序(从小到大)或者降序(从大到小)排列。冒泡排序是排序算法的一种。

1 冒泡排序的原理

1.1 基本思想

冒泡排序是将数据中较大或者较小的数据依次向右推移的一种排序技术。它的基本思想是比较相邻的两个数,以升序为例,将较小的数放在前面,较大的数放在后面。

图1 第一次“冒泡”的步骤

1.2 第一次“冒泡”

假设数列中有“8、5、9、3”四个数,如图1①所示,要使用升序的方式对这四个数进行排列。首先比较8和5这两个数,因为8比5大,将这两个数的位置进行交换,如图1②、图1③所示;接下来比较8和9,因为9比8大,此时无需交换两个数的位置,如图1③所示;最后比较9和3这两个数,因为9比3大,将这两个数的位置进行交换,如图1④、图1⑤所示。这样,经过第一轮的比较与交换位置,数列中的最大值9就被推移到最右端,就像水中的气泡一样,冒了出来,所以这种排序方式叫做“冒泡排序”。

1.3 第二次“冒泡”

在进行第二次“冒泡”时,因为数字9已经作为数列的最大值“冒”了出来,接下来比较的就是“5、8、2”这三个数,如图2①所示。

图2 第二次“冒泡”的步骤

首先比较5和8,因为8比5大,所以不交换位置,如图2①所示;接下来比较8和3,因为8比3大,所以交换两个数的位置,如图2②和图2③所示。这样,数字8作为数列的第二大数“冒”了出来。

1.4 第三次“冒泡”

最后,比较剩下的5和3,因为5大于3,所以交换两个数的位置,如图3①和图3②所示。

图3 第三次“冒泡”的步骤

相关链接1 对n个数字进行排列,需要“冒”n-1次“泡”,即进行n-1次排序。

2 冒泡排序的代码实现

对列表中的数据进行冒泡排序,实际上就是变换数据的下标(索引号)。可以通过for循环的嵌套实现升序冒泡排序,代码如图4所示。

图4 冒泡排序的代码

其中,第1行定义了包含四个数据的列表;第2行的for循环表示排序的次数,因为之前跳到n个数据要进行n-1次排序;第3行的for循环表示每次排序所要排的数据个数,从“1 冒泡排序的原理”中举的例子可以看出,第1次循环时要排4个数字,第2次循环时要排3个数字,第3次循环时要排2个数字,因此每次循环时要排的数字个数与循环次数有关;第4和第5行代码表示如果前面的数字大于后面的数字,则交换这两个数字的位置。排序后的列表如图5所示。

图5 排序之后的列表

相关链接2 如需降序排列,则只需将图4中的第4行代码“>”改为“<”即可。


http://www.ppmy.cn/server/109668.html

相关文章

基于django的失物招领系统的设计与实现/ 基于Python的失物招领系统的设计与实现/失物招领管理系统

失物招领系统的设计与实现 摘要:伴随着我国全面推动信息化的趋势&#xff0c;我国的很多行业都在朝着互联网的方向进发。结合计算机技术的失物招领系统能够很好地解决传统失物招领存在的问题&#xff0c;能够提高管理员管理的效率&#xff0c;改善服务质量。优秀的失物招领系统…

低代码技术助力移动端开发:简化开发流程,实现快速创新

在移动互联网快速发展的今天&#xff0c;企业和开发者面临着越来越高的需求&#xff0c;要求开发高质量、功能强大的移动应用&#xff0c;以满足用户的期待和市场的变化。然而&#xff0c;传统的移动端开发流程通常复杂且耗时&#xff0c;需要投入大量的资源和开发人员。为了应…

为什么 mysql-connector-java 只需要在 runtime 作用范围中配置

在 Java 中&#xff0c;访问数据库通常依赖于 JDBC&#xff08;Java Database Connectivity&#xff09;技术。JDBC 定义了一套标准的 API&#xff0c;用于与数据库进行交互。为了访问数据库&#xff0c;我们编写的代码需要依赖于 JDBC 接口而不是具体的数据库实现&#xff08;…

深度学习100问35:如何避免梯度爆炸发生

嘿&#xff0c;想避免梯度爆炸这个麻烦家伙&#xff0c;有好多招儿呢。 首先说说权重初始化&#xff0c;这就好比给游戏里的角色分配初始能力值。得合理安排神经网络的权重初始化哦&#xff0c;不然一开始就可能出问题。可以用像 Xavier 初始化或者 He 初始化这些方法&#x…

前端速通面经八股系列(一)—— CSS篇

CSS高频面经目录 一、CSS基础1. CSS选择器及其优先级2. CSS中可继承与不可继承属性有哪些3. display的属性值及其作用4. display的block、inline和inline-block的区别5. 隐藏元素的方法有哪些6. link和import的区别7. transition和animation的区别8. display:none与visibility:…

Python中的“for循环”:探索其无限潜力

引言 for循环是任何Python程序员工具箱中的必备技能之一。无论是在处理数据时需要遍历数组&#xff0c;还是在编写Web应用时循环处理请求&#xff0c;亦或是进行复杂的算法实现&#xff0c;for循环都能派上大用场。通过掌握for循环的不同用法&#xff0c;我们可以更高效地解决…

java 读取mysql中的表并按照指定格式导出excel

在Java中读取MySQL中的数据表并将其导出到Excel文件中&#xff0c;你需要以下几个步骤&#xff1a; 连接MySQL数据库&#xff1a;使用JDBC驱动程序连接到MySQL数据库。执行SQL查询&#xff1a;获取表数据。使用Apache POI库生成Excel文件&#xff1a;将数据写入Excel格式。保存…

WGCNA加权基因共表达网络一步法分析学习

WGCNA&#xff08;Weighted Gene Co-expression Network Analysis&#xff0c;加权重基因共表达网络分析&#xff09; WGCNA是一种用于分析基因表达数据的系统生物学方法。主要用于识别在基因表达数据中呈现共表达模式的基因模块&#xff0c;并将这些模块与样本特征&#xff0…