五种排序方式gif展示【python】
简述
有五种排序方式。
文章目录
- 简述
- 排序
- 简单排序
- 冒泡排序
- 选择排序
- 归并排序
- 快速排序
排序
简单排序
import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
import imageiodef plotAndSave(X, Y, path):plt.cla()plt.bar(X, Y)plt.savefig(path)def checkfile(path):if not os.path.exists(path):os.mkdir(path)else:shutil.rmtree(path)os.mkdir(path)if __name__ == '__main__':size = 30path = './PNG'algorithmname = '简单排序'Xs = list(range(size))A = np.random.randint(-10, 10, size)checkfile(path)PNGLIST = []i, j, times = 0, 0, 0PNGLIST.append(os.path.join(path, str(times) + '.png'))times += 1plotAndSave(Xs, A, PNGLIST[-1])while i < size - 1:j = i + 1while j < size:if A[i] > A[j]:A[i], A[j] = A[j], A[i]if times % 2 == 0:PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1j += 1i += 1PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])generated_images = []for png_path in PNGLIST:generated_images.append(imageio.imread(png_path))shutil.rmtree(path)generated_images = generated_images + [generated_images[-1]] * 5imageio.mimsave(algorithmname + '.gif', generated_images, 'GIF', duration=0.1)
冒泡排序
import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
import imageiodef plotAndSave(X, Y, path):plt.cla()plt.bar(X, Y)plt.savefig(path)def checkfile(path):if not os.path.exists(path):os.mkdir(path)else:shutil.rmtree(path)os.mkdir(path)if __name__ == '__main__':size = 30path = './PNG'algorithmname = '冒泡排序'Xs = list(range(size))A = np.random.randint(-10, 10, size)checkfile(path)PNGLIST = []i, j, times = 0, 0, 0PNGLIST.append(os.path.join(path, str(times) + '.png'))times += 1plotAndSave(Xs, A, PNGLIST[-1])while i < size - 1:j = 0while j < size - 1 - i:if A[j] > A[j + 1]:A[j], A[j + 1] = A[j + 1], A[j]if times % 3 == 0:PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1j += 1i += 1PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])generated_images = []for png_path in PNGLIST:generated_images.append(imageio.imread(png_path))shutil.rmtree(path)generated_images = generated_images + [generated_images[-1]] * 5imageio.mimsave(algorithmname + '.gif', generated_images, 'GIF', duration=0.1)
选择排序
import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
import imageiodef plotAndSave(X, Y, path):plt.cla()plt.bar(X, Y)plt.savefig(path)def checkfile(path):if not os.path.exists(path):os.mkdir(path)else:shutil.rmtree(path)os.mkdir(path)if __name__ == '__main__':size = 30path = './PNG'algorithmname = '选择排序'Xs = list(range(size))A = np.random.randint(-10, 10, size)checkfile(path)PNGLIST = []i, j, times = 0, 0, 0PNGLIST.append(os.path.join(path, str(times) + '.png'))times += 1plotAndSave(Xs, A, PNGLIST[-1])while i < size - 1:j = i + 1mi = iwhile j < size:if A[mi] > A[j]:mi = jj += 1if mi != i:A[i], A[mi] = A[mi], A[i]# if times % 2 == 0:PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1i += 1PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])generated_images = []for png_path in PNGLIST:generated_images.append(imageio.imread(png_path))shutil.rmtree(path)generated_images = generated_images + [generated_images[-1]] * 5imageio.mimsave(algorithmname + '.gif', generated_images, 'GIF', duration=0.1)
归并排序
import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
import imageiodef plotAndSave(X, Y, path):plt.cla()plt.bar(X, Y)plt.savefig(path)def checkfile(path):if not os.path.exists(path):os.mkdir(path)else:shutil.rmtree(path)os.mkdir(path)def MergeSort(A, s, e):global PNGLIST, timesif s >= e:return Nonemid = (s + e) // 2MergeSort(A, s, mid)MergeSort(A, mid + 1, e)i, j, tot = s, mid + 1, 0B = A.copy()while i <= mid and j <= e:if A[i] > A[j]:B[tot] = A[j]j += 1else:B[tot] = A[i]i += 1tot += 1while i <= mid:B[tot] = A[i]i += 1tot += 1while j <= e:B[tot] = A[j]j += 1tot += 1for i in range(tot):A[s + i] = B[i]PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1if __name__ == '__main__':size = 30path = './PNG'algorithmname = '归并排序'Xs = list(range(size))A = np.random.randint(-10, 10, size)checkfile(path)PNGLIST = []i, j, times = 0, 0, 0PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1MergeSort(A, 0, size-1)PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])generated_images = []for png_path in PNGLIST:generated_images.append(imageio.imread(png_path))shutil.rmtree(path)generated_images = generated_images + [generated_images[-1]] * 5imageio.mimsave(algorithmname + '.gif', generated_images, 'GIF', duration=0.1)
快速排序
import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
import imageiodef plotAndSave(X, Y, path):plt.cla()plt.bar(X, Y)plt.savefig(path)def checkfile(path):if not os.path.exists(path):os.mkdir(path)else:shutil.rmtree(path)os.mkdir(path)def qsort(A, s, e):global PNGLIST, timesif s >= e:return Nonei, j, k = s, e, A[s]while i < j:while i < j and A[j] >= k:j -= 1if i < j:A[i] = A[j]while i < j and A[i] <= k:i += 1if i < j:A[j] = A[i]A[i] = kPNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1qsort(A, s, i - 1)qsort(A, i + 1, e)if __name__ == '__main__':size = 30path = './PNG'algorithmname = '快速排序'Xs = list(range(size))A = np.random.randint(-10, 10, size)checkfile(path)PNGLIST = []i, j, times = 0, 0, 0PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])times += 1qsort(A, 0, size - 1)PNGLIST.append(os.path.join(path, str(times) + '.png'))plotAndSave(Xs, A, PNGLIST[-1])generated_images = []for png_path in PNGLIST:generated_images.append(imageio.imread(png_path))shutil.rmtree(path)generated_images = generated_images + [generated_images[-1]] * 5imageio.mimsave(algorithmname + '.gif', generated_images, 'GIF', duration=0.5)
五种排序方式gif展示【python】相关推荐
- Java两种排序方式快慢比较
2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...
- 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案
终于到了这个系列的最后一篇文章了,这个系列的文章本是许多话题的基础,却拖了那么长时间还没有完结.这篇文章主要讨论五种缓存方式各自的优劣,以及他们的性能关键在什么地方,如果要进行改进又有什么可选方案.在 ...
- lfu算法实现java_LFU五种实现方式,从简单到复杂
前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...
- 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式
单例五种创建方式(下一篇:工厂模式) 什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 单例应用场景 1. Windows的Task Manager(任务管理器)就是很典型的单例模式( ...
- 谈表达式树的缓存(6):五种缓存方式的性能比较
开始还债,因为还有至少两个可写的重要话题依赖在这个系列上,不解决就难以前进. 目前我们已经涉及了五种不同的缓存实现,它们分别是: SimpleKeyCache:构造字符串作为Key,使用字典作为存储. ...
- 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序
冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...
- lfu实现 java_LFU五种实现方式,从简单到复杂
前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...
- JS 跨域问题常见的五种解决方式
JS 跨域问题常见的五种解决方式 一.什么是跨域? 要理解跨域问题,就先理解好概念.跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本只能读取来自同一来 ...
- Java 单例模式常见五种实现方式
定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...
最新文章
- 如何用纯 CSS 创作气泡填色的按钮特效
- C++11中值得关注的几大变化
- js的动态加载、缓存、更新以及复用(四)
- 将MSRA-TD500标签转换成逆时针输出标签+labeleme json格式转四个点的txt
- CSC 121, 122.. MAT 181, 182, 252, 271, 281, 474.. ECN 272, 273, 372, 472
- 1,二维数组中的查找《剑指offer》
- VS2008下, Microsoft AJAX 组件开发单独js智能提示
- 深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)
- Python线程池ThreadPoolExecutor详细介绍
- jupyter lab 导出笔记为pdf
- STM32——RTC实现毫秒级计时
- Openwrt 硬改过程记录
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
- token与refresh token
- 光猫 路由器 和交换器
- 如何使用git命令回滚到指定版本以及返回到新版本
- Swift:什么时候需要mutating这个参数
- java学习笔记02
- 寻找AR中的Big Difference - v3.0 | AR指南
- CT值以及窗宽窗位(未完待续)
热门文章
- WINCE流驱动的自动加载
- java dagger2_从零开始搭建一个项目(rxJava+Retrofit+Dagger2) --完结篇
- c++之五谷杂粮---2
- Unity FixedUpdate 与 Update 的线程关系实验
- 关于curl: (2) Failed Initialization
- Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
- 关于分组序号在MySQL中的实现
- OpenMPI 安装
- SPP pooling layer
- 机器学习知识点(一)文本字符信息熵Java实现