收集一波十大算法动态图
前言:十大算法归类及对比图
tips:无代码展示,请在后面参考链接自己找!!!
![](https://img.haomeiwen.com/i12585785/814f635471264812.png)
![](https://img.haomeiwen.com/i12585785/0d5c1ef679da90f6.png)
1.冒泡排序(Bubble Sort)(邻近对比 - 你行你上,no can't no...)
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。(相邻对比交换位置)
![](https://img.haomeiwen.com/i12585785/00bd06c1b1cdcb72.gif)
2.选择排序(Selection Sort)(选择最大或最小 - 最菜的出来)
选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。(拿出最大或最小,然后在剩余中再拿最大或最小)
![](https://img.haomeiwen.com/i12585785/b67fc46afdc20cc1.gif)
3.插入排序(Insertion Sort)(未排序插已排序 - 插班生)
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。(将未排序的,在已排序中找到位置插进去)
![](https://img.haomeiwen.com/i12585785/d317b2a2e4591ad4.gif)
4.希尔排序(Shell Sort)(插入排序升级版- 先分组再插入)
希尔排序的核心在于间隔序列的设定。既可以提前设定好间隔序列,也可以动态的定义间隔序列。动态定义间隔序列的算法是《算法(第4版》的合著者Robert Sedgewick提出的。
![](https://img.haomeiwen.com/i12585785/23abea5f9a7eb194.gif)
![](https://img.haomeiwen.com/i12585785/0ed048c95908255b.gif)
图来源
5.归并排序(Merge Sort)(两两比后四人组排序,四四比后八人组排序。。- 比赛制)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
![](https://img.haomeiwen.com/i12585785/f65e17c1828ae579.gif)
![](https://img.haomeiwen.com/i12585785/518da026621cbed5.gif)
6.快速排序(Quick Sort)(冒泡排序的改进版)
快速排序的基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
![](https://img.haomeiwen.com/i12585785/e2165b635ee5008b.gif)
![](https://img.haomeiwen.com/i12585785/441c7bdc9262cf20.gif)
漫画:什么是快速排序?(完整版)
7.堆排序(Heap Sort)
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
![](https://img.haomeiwen.com/i12585785/e1fc1f31b1b0dc32.gif)
![](https://img.haomeiwen.com/i12585785/e07e488f103d04a2.gif)
8.计数排序(Counting Sort)
计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。
![](https://img.haomeiwen.com/i12585785/a4af4d4837bc5cb2.gif)
![](https://img.haomeiwen.com/i12585785/7940185bd6499f5c.gif)
9.桶排序(Bucket Sort)
桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排
![](https://img.haomeiwen.com/i12585785/76601f156098c376.png)
![](https://img.haomeiwen.com/i12585785/374f4e4a41b59bb6.gif)
10.基数排序(Radix Sort)
基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以是稳定的。
![](https://img.haomeiwen.com/i12585785/ee41d9ba9d41c625.gif)
![](https://img.haomeiwen.com/i12585785/d1c26722a18c0dd8.gif)