本系列文章通过 1000(一篇文章表示 1 个实例) 个实例 ,为读者提供较为详细的练习题目,以便读者举一反三,深度学习。本系列的文章涉及到 Python 知识点包括:Python 语言基础、运算符和表达式、语句和程序结构、列表和元组、字典和集合、字符串、正则表达式、函数、面向对象编程、模块和包、异常处理和程序调试、文件和目录操作、数据库编程、界面编程、网络编程、WEB 编程、进程和线程、网络爬虫、游戏编程等知识点,由易到难,由浅入深,一步步打下坚实的编程基础。
本系列文章涉及的算法包括搜索、回溯、递归、排序、迭代、贪心、分治和动态规划等,涉及的数据结构包括字符串、列表、指针、区间、队列、矩阵、堆栈、链表、哈希表、线段树、二叉树、二叉搜索树和图结构等。
本系列文章是笔者为适应当前教育改革的创新要求,更好地践行语言类课程,满足实践教学与创新能力培养的需要,阅读大量书籍、各大互联网公司的面试算法、LintCode、LeetCode、九章算法和结合笔者近几年项目经验编写的系列文章,精选了 1000 个趣味性、实用性强的应用实例,从不同难度、不同算法、不同类型和不同数据结构等方面,将实际算法进行总结,希望为 Python 编程人员抛砖引玉。由于笔者经验与水平有限,博文中疏漏及不妥之处在所难免,衷心地希望各位读者在评论区多提宝贵意见及具体的修改建议,以便笔者进一步修改和完善。
冒泡排序法是观察水中气泡变化而创造的排序方法,它的基本原理是从第一个数据开始,比较相邻数据的大小,如果大小顺序有误,则对调之后再与下一个数据进行比较,就像气泡逐渐从水底上升到水面上的情况。经过这样不断交换之后,就可以找出最后一个数据的正确位置。接着逐步进行交换,直到完成所有数据的排序为止。
冒泡排序法最后的结果也有两种形式,即递增数列和递减数列。接下来用一组数据来详细讲解冒泡排序法的基本原理。
例如,有这样一组数据:56、20、84、66、13,如下图所示:
按照递增顺序进行排序,步骤如下:
步骤1:首先用第一个位置的数据56与第二个位置的数据20进行比较,因为20小于56,所以进行交换;然后再用第二个位置的数据56与第三个位置的数据84进行比较,因为56小于84,所以不用交换;再用第三个位置的数据84与第四个位置的数据66进行比较,因为66小于84,所以进行交换;最后用第四个位置的数据84与第五个位置的数据13进行比较,因为84大于13,所以进行交换。这样就完成了第一次的排序,排序过程如下图所示:
步骤2:经过第一次排序,已经将最大值84放在了对应的位置,因此在进行第二次排序时比较到13即可。
第二次排序依然从第一个位置开始比较,即比较数据20与56的大小,因为20小于56,所以不需要交换;然后比较数据56与66的大小,因为56小于66,所以不需要交换;最后比较数据66与13的大小,因为66大于13,所以需要交换。这样就完成了第二次排序,排序过程如下图所示:
步骤3:经过第二次排序,已经将剩下数列(除84以外)的最大值66放在了对应的位置,因此在进行第三次排序时比较到13即可。
第三次排序依然从第一个位置开始进行比较,即比较数据20与56的大小,因为20小于56,所以不需要交换位置;然后比较数据56与13的大小,因为56大于13,所以需要交换位置。这样就完成了第三次排序,排序过程如下图所示:
步骤4:经过第三次排序,已经将数列84,66,56放在了对应的位置,因此在进行第四次排序时比较到13即可。
第四次排序依然从第一个位置开始比较,比较数据20与13进行的大小,因为20大于13,所以需要交换位置。这样就完成了第四次排序,排序过程如下图所示:
至此,排序完成。
使用冒泡排序法为列表:56,20,84,66,13,进行递增排序。具体代码如下:
def bubble(data, data_len): # 自定义一个冒泡排序法函数
traversal_times = data_len - 1
for m in range(traversal_times, 0, -1): # 遍历排序次数
for n in range(m): # 遍历新数据
if data[n + 1] < data[n]: # 如果数据小于原来的数据
data[n], data[n + 1] = data[n + 1], data[n] # 需要交换位置
print('第 %d 次排序之后的结果是' % (data_len - m), end='') # 提示
for n in range(data_len): # 遍历每次排序的结果
print('%3d' % data[n], end='') # 输出结果
print() # 输出空行
num_list = [56, 20, 84, 66, 13] # 创建数列并初始化
length = len(num_list)
print("原始数据为:") # 提示
for i in range(length): # 遍历原有数据
print('%3d' % num_list[i], end='') # 输出结果
print('\n---------------------------') # 输出分界符
bubble(num_list, length) # 调用冒泡排序法函数
print('---------------------------') # 输出分界符
print("排序之后的数据为:") # 提示
for i in range(length): # 遍历排序好的新数列的数据
print('%3d' % num_list[i], end='') # 输出结果
print('') # 输出空行
程序运行结果如下图所示:
从上图所示的运行结果来看,排序的步骤和上述介绍的冒泡排序法步骤完全吻合。
如今各个电视台在每周五的黄金档会有独播的综艺节目,某周的电视台黄金档综艺的收视率情况数据如下:14,27,28,04,21(省略其%),用冒泡排序法把此收视率按照从高到低的顺序排序,程序运行结果如下图所示:
感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!
????好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
????如果我的博客对你有帮助、如果你喜欢我的博客内容,请点赞
、评论
、收藏
一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
?编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注
我哦!
前言 最近公司有需求需要制作自定义二维码打开小程序,且该二维码要传递一些自定...
其实我很少用这个,所以之前一直没注意这个问题,自从落叶那厮写了个变态的测试...
HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系...
request介绍 Requests建立在世界上下载量最大的Python库urllib3上它令Web请求变...
Atom-IDE 的使用方法简单介绍 今日,GitHub 宣布与 Facebook 合作推出了 Atom-ID...
1 安装说明 1.1 用到的软件 软件 版本 下载地址 linux Ubuntu Server 18.04.2 LT...
化作尘所有项目开源 这里资料还没准备好先关注收藏一下马上就发了。。。 一、项...
Redis数据同步主从库实现数据一致 Redis实例宕机了怎么办 我们知道通过AOF和RDB...
LVS-DRKeepalived 高可用集群 Keepalived介绍 Keepalived实现原理 LVS-DR-Keepal...
本文实例为大家分享了js动态生成表格的具体代码,供大家参考,具体内容如下 针对...