农八师建设兵团社保网站,深圳包装设计招聘,深圳全网推广服务,wordpress图片切换插件1 、算法的魅力深刻研究排序算法是入门算法较为好的一种方法#xff0c;现在还记得4年前手动实现常见8种排序算法#xff0c;通过随机生成一些数据#xff0c;逐个校验代码实现的排序过程是否与预期的一致#xff0c;越做越有劲#xff0c;越有劲越想去研究#xff0c;公… 1 、算法的魅力深刻研究排序算法是入门算法较为好的一种方法现在还记得4年前手动实现常见8种排序算法通过随机生成一些数据逐个校验代码实现的排序过程是否与预期的一致越做越有劲越有劲越想去研究公交车上吃饭的路上。。。那些画面现在依然记忆犹新。能力有限当时并没有生成排序过程的动画所以这些年想着抽时间一定把排序的过程都制作成动画然后分享出来让更多的小伙伴看到通过排序算法的动态演示动画找到学习算法的真正乐趣从而迈向一个新的认知领域。当时我还是用C写的时过境迁Python迅速崛起得益于Python的简洁接口易用最近终于有人在github中开源了使用Python动画展示排序算法的项目真是倍感幸运。动画还是用matplotlib做出来的这就更完美了一边学完美的算法一边还能提升Python熟练度一边还能学到使用matplotlib制作动画。2 、完美的答案这个库一共演示8个常见的排序算法bubble-sort : Only show the visualization of bubble sorting algorithm in the animation. The following arguments have similar functions.comb-sortheap-sortinsertion-sortmerge-sortquick-sortselection-sortshell-sort启动的脚本是output.py脚本的参数有三类下面逐个解释。python output.py play heap-sort reversedplay表示展示排序的动画其他两个选项保存html和mp4play : Play an animation of a specific sorting algorithm or all algorithms in a new window, as a figure to Matplotlib.save-html : Save the animation as a HTML page with a sequence of images.save-mp4 : Save the animation as a MP4 video.heap-sort表示堆排序就是此次执行脚本你想看哪个排序算法的动画展示,设置为quick-sort表示查看快排动画, all表示所有排序算法一次展示。reversed 这类参数是我重点想说的这类参数还有如下其他几个选项。通常说一个快排平均时间复杂度为nlog2n为什么是平均呢我们很难找到一个真正100%准确的函数t输入data通过t(data)计算出准确的理论执行时间因为data的分布无法准确的拟合出来而它又直接影响到实际的排序时间比如输入一个几乎排序好的序列一个没有重复元素的序列一个随机序列一个递减序列。所以只能根据某类分布给出大概的预估执行时间值。almost-sorted : Sort an almost-sorted sequence.few-unique : Sort a few-unique sequence.random (default) : Sort a random sequence.reversed : Sort a descending sequence.3 、动画展示使用的模块和实例代码如下使用的包主要是内置模块random, os, sys, re以及 matplotlib的 animation功能剩下的就是手动实现的8个排序算法。import randomimport osimport sysimport refrom matplotlib import pyplot as pltfrom matplotlib import animationfrom sorting.data import Datafrom sorting.selectionsort import selection_sortfrom sorting.bubblesort import bubble_sortfrom sorting.insertionsort import insertion_sortfrom sorting.shellsort import shell_sortfrom sorting.mergesort import merge_sortfrom sorting.quicksort import quick_sortfrom sorting.heapsort import heap_sortfrom sorting.combsort import comb_sortfrom sorting.monkeysort import monkey_sort快速排序代码会保存所有的操作帧# Script Name : quicksort.py# Author : Howard Zhang# Created : 14th June 2018# Last Modified : 14th June 2018# Version : 1.0# Modifications :# Description : Quick sorting algorithm.import copyfrom .data import Datadef quick_sort(data_set):# FRAME OPERATION BEGIN frames [data_set]# FRAME OPERATION END ds copy.deepcopy(data_set) qsort(ds, 0, Data.data_count, frames)# FRAME OPERATION BEGIN frames.append(ds)return frames# FRAME OPERATION ENDdef qsort(ds, head, tail, frames):if tail - head 1:# FRAME OPERATION BEGIN ds_y copy.deepcopy(ds)for i in range(head, tail): ds_y[i].set_color(y)# FRAME OPERATION END i head j tail - 1 pivot ds[j].valuewhile i j:# FRAME OPERATION BEGIN frames.append(copy.deepcopy(ds_y)) frames[-1][i if ds[i].value pivot else j].set_color(r) frames[-1][j if ds[i].value pivot else i].set_color(k)# FRAME OPERATION ENDif ds[i].value pivot or ds[j].value pivot: ds[i], ds[j] ds[j], ds[i]# FRAME OPERATION BEGIN ds_y[i], ds_y[j] ds_y[j], ds_y[i] frames.append(copy.deepcopy(ds_y)) frames[-1][i if ds[i].value pivot else j].set_color(r) frames[-1][j if ds[i].value pivot else i].set_color(k)# FRAME OPERATION ENDif ds[i].value pivot: j - 1else: i 1 qsort(ds, head, i, frames) qsort(ds, i1, tail, frames)我已经执行完8个排序算法录制了3个动画效果如下1) 快速排序2) 归并排序3) 堆排序项目地址这里面有完整源码https://github.com/zamhown/sorting-visualizer往期精彩如何在面试中展现你对Python的coding能力如何用Python和数据分析鉴别网络刷单 使用Python伪装黑客批量获取网站密码用Python打造实时截图识别OCREND关注【程序IT圈】更多的Python好文输出