冒泡排序的动态演示

Posted Python百草园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序的动态演示相关的知识,希望对你有一定的参考价值。

冒泡排序的基本原理是:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 

  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 

  3. 针对所有的元素重复以上的步骤,除了最后一个。 

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。


利用柱形图可以实现这个排序过程的演示:

先绘制全部元素的柱形图,再把要比较的元素用绿色重绘:

plt.bar(x, nums, color="orange",align='center') # 先绘制初始状态plt.bar(j + 1, nums[j], color="g", align="center") # 正在比较的两个元素用红色重绘plt.bar(j + 2, nums[j + 1], color="g", align="center") # 正在比较的两个元素用红色重绘


如果比较结果是前面元素比后面元素大,需要交换,再把交换后的结果重绘:

if nums[j] > nums[j + 1]: # 比较当前元素和后一个元素值的大小 nums[j], nums[j + 1] = nums[j + 1], nums[j] # 若前面的元素值大于后面的值,交换顺序 plt.cla() # 清除内容 plt.bar(x, nums, color="orange",align='center') # 重绘制初始状态 plt.bar(j+1, nums[j], color="r", align="center") # 用红色重绘交换的两个元素 plt.bar(j + 2, nums[j + 1], color="r", align="center") # 用红色重绘交换的两个元素

冒泡排序的动态演示

比较一趟的图示如下:


冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示

冒泡排序的动态演示


完整参考代码:

#=============================================# 作者: 武汉理工大学 赵广辉# 日期: 2020.06.03#Email:30849528@qq.com# 版权: 作者原创,版权所有,谢绝转载# 教材:Python语言及其应用#=============================================import randomimport numpy as npimport matplotlib.pyplot as plt
def BubbleSort(num,start,stop): x = np.arange(1, num + 1) # 产生x数组,从1到num nums = random.sample(range(start,stop), 10) # 从(start,stop)随机产生10个不相等的整数 for i in range(len(nums) - 1): # 从0 到nums元素个数减1 for j in range(len(nums) - 1 - i): # 最后的i个元素比较过了,不需要再比较 plt.ion() # 打开交互模式 plt.cla() # 清除内容 plt.bar(x, nums, color="orange",align='center') # 先绘制初始状态 plt.bar(j + 1, nums[j], color="g", align="center") # 正在比较的两个元素用红色重绘 plt.bar(j + 2, nums[j + 1], color="g", align="center") # 正在比较的两个元素用红色重绘 plt.pause(0.2) # 暂停1秒 if nums[j] > nums[j + 1]: # 比较当前元素和后一个元素值的大小 nums[j], nums[j + 1] = nums[j + 1], nums[j] # 若前面的元素值大于后面的值,交换顺序 plt.cla() # 清除内容 plt.bar(x, nums, color="orange",align='center') # 重绘制初始状态 plt.bar(j+1, nums[j], color="r", align="center") # 用红色重绘交换的两个元素 plt.bar(j + 2, nums[j + 1], color="r", align="center") # 用红色重绘交换的两个元素 plt.pause(0.2) # 暂停1秒 plt.ioff() # 关闭交互模式
if __name__ == '__main__': num = 10 # 参与比较的元素的个数,可改为用户输入 start,stop= 0,100 # 随机元素的范围,可由用户输入 BubbleSort(num, start, stop) # 排序函数

结合前面一个教程,可以将其导入为gif动画

以上是关于冒泡排序的动态演示的主要内容,如果未能解决你的问题,请参考以下文章

排序----冒泡排序

mfc动态演示排序算法

干货收藏:一文掌握十大经典排序算法(动态演示+代码)

算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度

算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度

八大排序算法——冒泡排序(动图演示 思路分析 实例代码java 负杂度分析)