2 完美的答案

• `bubble-sort` : Only show the visualization of bubble sorting algorithm in the animation. The following arguments have similar functions.
• `comb-sort`
• `heap-sort`
• `insertion-sort`
• `merge-sort`
• `quick-sort`
• `selection-sort`
• `shell-sort`

`python output.py play heap-sort reversed`

play表示展示排序的动画，其他两个选项：`保存html``mp4`

• `play` : 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，为什么是平均呢？

• `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 动画展示

```import random
import os
import sys
import re
from matplotlib import pyplot as plt
from matplotlib import animation
from sorting.data import Data
from sorting.selectionsort import selection_sort
from sorting.bubblesort import bubble_sort
from sorting.insertionsort import insertion_sort
from sorting.shellsort import shell_sort
from sorting.mergesort import merge_sort
from sorting.quicksort import quick_sort
from sorting.heapsort import heap_sort
from sorting.combsort import comb_sort
from sorting.monkeysort import monkey_sort```

```# Script Name     : quicksort.py
# Author          : Howard Zhang
# Created         : 14th June 2018
# Version         : 1.0
# Modifications	  :
# Description     : Quick sorting algorithm.

import copy
from .data import Data

def 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 END

if tail - head > 1:
# FRAME OPERATION BEGIN
ds_y = copy.deepcopy(ds)
ds_y[i].set_color('y')
# FRAME OPERATION END
j = tail - 1
pivot = ds[j].value
while 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 END
if 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 END
if ds[i].value == pivot:
j -= 1
else:
i += 1
qsort(ds, i+1, tail, frames)```

1) 快速排序

2) 归并排序

3) 堆排序

https://github.com/zamhown/sorting-visualizer

0 条评论

• Python|获取对象的类型，方法，setattr()添加属性

01 基本类型 基本类型都可以用type()判断： >>> type(123) <class 'int'> >>> type('str') <class 's...

• 原创系列 |「冒泡排序」提升为「快速排序」，都发生了什么？

彻底弄明白常用的排序算法的基本思想，算法的时间和空间复杂度，以及如何选择这些排序算法，确定要解决的问题的最佳排序算法，我们先总结下冒泡排序和其改进后的快速排序这...

• 冒泡排序到快速排序做的那些优化

本公众号主要推送关于对算法的思考以及应用的消息。算法思想说来有，分而治之，搜索，动态规划，回溯，贪心等，结合这些思想再去思考如今很火的大数据，云计算和机器学习，...

• 海量数据处理问题知识点复习手册

https://blog.csdn.net/v_july_v/article/details/6279498

• springBoot Actuator 健康监测

spring boot 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题，而微服务的特点决定了功能模块的部署是分布式的，运行在不同的机器上相互通过服...

• ie6,ie7,ff 的css兼容hack写法

Code <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"　"http://www....

• 谷歌大脑研究：AI识别蛋白质结晶，准确率高达94%

谷歌大脑团队的成员今天宣布开发了用于识别蛋白质结晶的深层卷积神经网络，准确率约为94％。蛋白质结晶决定了细胞的形状，可以在发现治疗各种疾病的药物中发挥作用。它们...

• 反射类的main方法

有时候我们需要调用一个类的Main方法，也可说是执行这个类的代码。但是这时候这个类我们还没有写好，或者这个类是通过网络运行时传给我们的，我们就不可能在程序中知道...