您的位置:首页 > 编程语言 > Go语言

AlgorithmMan,一套免费的算法演示神器(开源动画演示版)

2020-08-08 21:01 916 查看

文章末尾附带GitHub开源下载地址。

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/971 访问。

0、概述

我从2018年08月05日开始陆续在网上发表关于算法的系列博文,在《C#算法设计排序篇》写了11种常见的排序算法并为每一种算法开发了一个算法演示程序(AlgorithmMan by byteflying),这一系列工具提供了一种可视化的、可调节的、免费的算法演示方案,旨在用动画的方式帮助初学算法的同学更加轻松的进入算法的殿堂。现将这11个工具汇总在此博文,希望能给各位同学带来一些帮助。水平有限,若有瑕疵,见笑诸君了。

1、冒泡排序(Bubble Sort)

它重复地访问要排序的元素列,一次比较两个相邻的元素,如果他们的顺序不符合预期就把他们交换过来。访问元素的工作是重复地进行直到没有相邻元素需要交换时为止。

原文链接:https://www.byteflying.com/archives/672

2、快速排序(Quick Sort)

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

原文链接:https://www.byteflying.com/archives/677

3、直接插入排序(Straight Insertion Sort)

直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。

原文链接:https://www.byteflying.com/archives/679

4、选择排序(Selection Sort)

选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。

原文链接:https://www.byteflying.com/archives/681

5、归并排序(Merge Sort)

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

原文链接:https://www.byteflying.com/archives/683

6、堆排序(Heap Sort)

堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的升序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。

 

原文链接:https://www.byteflying.com/archives/685

7、希尔排序(Shell’s Sort)

希尔排序是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法把数组按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数组恰被分成一组,算法终止。

原文链接:https://www.byteflying.com/archives/687

8、计数排序(Counting Sort)

计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的时间复杂度为线性的O(n+k)(其中k是整数的范围,即max – min + 1),快于任何比较排序算法,这是一种典型的空间换时间的算法。

原文链接:https://www.byteflying.com/archives/689

9、基数排序(Radix Sort)

基数排序属于“分配式排序”(Distribution Sort),它是透过键值的部分信息,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(n*log(r)*m) ,其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

原文链接:https://www.byteflying.com/archives/691

10、桶排序(Bucket Sort)

桶排序的工作原理是将数组根据一定的策略均匀的分到有限数量的桶子里,再对每个桶里的内容进行排序。桶排序是鸽巢排序的一种归纳结果,当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间O(n) 。桶排序并不是比较排序,它不受到O(n*log(n)) 的下限的影响。

原文链接:https://www.byteflying.com/archives/693

11、二叉树排序(Binary Tree Sort)

二叉树排序是构建在二叉排序树(Binary Sort Tree)上的算法,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:

  • 若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;
  • 若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
  • 左、右子树也分别为二叉排序树。

二叉树排序需要先生成一个二叉排序树,再使用中序遍历输出所有数据。

原文链接:https://www.byteflying.com/archives/695

免费下载

GitHub下载地址:https://github.com/byteflying/AlgorithmManRelease

总结

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/971 访问。

以上是这11种常见排序算法工具的截图和地址,希望能给学习算法的同学一点点小小的帮助。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐