冒泡排序的动态演示
Posted Python百草园
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序的动态演示相关的知识,希望对你有一定的参考价值。
冒泡排序的基本原理是:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
利用柱形图可以实现这个排序过程的演示:
先绘制全部元素的柱形图,再把要比较的元素用绿色重绘:
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 random
import numpy as np
import 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动画
以上是关于冒泡排序的动态演示的主要内容,如果未能解决你的问题,请参考以下文章
算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度
算法漫游指北(第七篇):冒泡排序冒泡排序算法描述动图演示代码实现过程分析时间复杂度和选择排序算法描述动图演示代码实现过程分析时间复杂度