简述

有五种排序方式。

文章目录

  • 简述
  • 排序
    • 简单排序
    • 冒泡排序
    • 选择排序
    • 归并排序
    • 快速排序

排序

简单排序

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】相关推荐

  1. Java两种排序方式快慢比较

    2019独角兽企业重金招聘Python工程师标准>>> Java中List的排序方式有两种,现在我们测试下这两种排序方式的快慢吧,我们需要用到两个类, 一个是运行程序的Main类,另 ...

  2. 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案

    终于到了这个系列的最后一篇文章了,这个系列的文章本是许多话题的基础,却拖了那么长时间还没有完结.这篇文章主要讨论五种缓存方式各自的优劣,以及他们的性能关键在什么地方,如果要进行改进又有什么可选方案.在 ...

  3. lfu算法实现java_LFU五种实现方式,从简单到复杂

    前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...

  4. 单例对象会被jvm的gc时回收吗_设计模式专题02-单例五种创建方式

    单例五种创建方式(下一篇:工厂模式) 什么是单例 保证一个类只有一个实例,并且提供一个访问该全局访问点 单例应用场景 1. Windows的Task Manager(任务管理器)就是很典型的单例模式( ...

  5. 谈表达式树的缓存(6):五种缓存方式的性能比较

    开始还债,因为还有至少两个可写的重要话题依赖在这个系列上,不解决就难以前进. 目前我们已经涉及了五种不同的缓存实现,它们分别是: SimpleKeyCache:构造字符串作为Key,使用字典作为存储. ...

  6. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  7. lfu实现 java_LFU五种实现方式,从简单到复杂

    前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...

  8. JS 跨域问题常见的五种解决方式

    JS 跨域问题常见的五种解决方式 一.什么是跨域? 要理解跨域问题,就先理解好概念.跨域问题是由于javascript语言安全限制中的同源策略造成的. 简单来说,同源策略是指一段脚本只能读取来自同一来 ...

  9. Java 单例模式常见五种实现方式

    定义 单例模式,属于创建类型的一种常用的软件设计模式. 单例模式最初的定义出现于<设计模式>(艾迪生维斯理, 1994):"保证一个类仅有一个实例,并提供一个访问它的全局访问点. ...

最新文章

  1. 如何用纯 CSS 创作气泡填色的按钮特效
  2. C++11中值得关注的几大变化
  3. js的动态加载、缓存、更新以及复用(四)
  4. 将MSRA-TD500标签转换成逆时针输出标签+labeleme json格式转四个点的txt
  5. CSC 121, 122.. MAT 181, 182, 252, 271, 281, 474.. ECN 272, 273, 372, 472
  6. 1,二维数组中的查找《剑指offer》
  7. VS2008下, Microsoft AJAX 组件开发单独js智能提示
  8. 深入理解Python中赋值、深拷贝(deepcopy)、浅拷贝(copy)
  9. Python线程池ThreadPoolExecutor详细介绍
  10. jupyter lab 导出笔记为pdf
  11. STM32——RTC实现毫秒级计时
  12. Openwrt 硬改过程记录
  13. 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
  14. token与refresh token
  15. 光猫 路由器 和交换器
  16. 如何使用git命令回滚到指定版本以及返回到新版本
  17. Swift:什么时候需要mutating这个参数
  18. java学习笔记02
  19. 寻找AR中的Big Difference - v3.0 | AR指南
  20. CT值以及窗宽窗位(未完待续)

热门文章

  1. WINCE流驱动的自动加载
  2. java dagger2_从零开始搭建一个项目(rxJava+Retrofit+Dagger2) --完结篇
  3. c++之五谷杂粮---2
  4. Unity FixedUpdate 与 Update 的线程关系实验
  5. 关于curl: (2) Failed Initialization
  6. Java基础学习总结(52)——Liunx系统Centos上搭建Java开发环境
  7. 关于分组序号在MySQL中的实现
  8. OpenMPI 安装
  9. SPP pooling layer
  10. 机器学习知识点(一)文本字符信息熵Java实现