篇首语:本文由编程笔记#小编为大家整理,主要介绍了十大排序算法总结相关的知识,希望对你有一定的参考价值。
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
十种常见排序算法可以分为两大类,如下图所示。
常见排序算法简介如下表所示。
排序方法 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 辅助空间复杂度 | 稳定性 | 博客链接 |
---|---|---|---|---|---|---|
直接插入排序 | O ( n ) O(n) O(n) | O ( n 2 ) O(n^{2}) O(n2) | O ( n 2 ) O(n^{2}) O(n2) | O ( 1 ) O(1) O(1) | 稳定 | 直接插入排序算法 |
折半插入排序 | O ( n ) O(n) O(n) | O ( n 2 ) O(n^{2}) O(n2) | O ( n 2 ) O(n^{2}) O(n2) | O ( 1 ) O(1) O(1) | 稳定 | 折半插入排序算法 |
简单选择排序 | O ( n 2 ) O(n^{2}) O(n2) | O ( n 2 ) O(n^{2}) O(n2) | O ( n 2 ) O(n^{2}) O(n2) | O ( 1 ) O(1) O(1) | 不稳定 | 简单选择排序算法 |
冒泡排序 | O ( n ) O(n) O(n) | O ( n 2 ) O(n^{2}) O(n2) | O ( n 2 ) O(n^{2}) O(n2) | O ( 1 ) O(1) O(1) | 稳定 | 冒泡排序算法 |
希尔排序 | – | – | – | O ( 1 ) O(1) O(1) | 不稳定 | 希尔排序算法 |
快速排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n 2 ) O(n^{2}) O(n2) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n ) O(n) O(n) | 不稳定 | 快速排序算法 |
堆排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( 1 ) O(1) O(1) | 不稳定 | |
归并排序 | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n l o g n ) O(nlogn) O(nlogn) | O ( n ) O(n) O(n) | 稳定 | 归并排序算法 |
计数排序 | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( k ) O(k) O(k) | 稳定 | |
桶排序 | O ( n + k ) O(n+k) O(n+k) | O ( n + k ) O(n+k) O(n+k) | O ( n 2 ) O(n^{2}) O(n2) | O ( n + k ) O(n+k) O(n+k) | 稳定 | |
基数排序 | O ( n × k ) O(n \\times k) O(n×k) | O ( n × k ) O(n \\times k) O(n×k) | O ( n × k ) O(n \\times k) O(n×k) | O ( n + k ) O(n+k) O(n+k) | 稳定 |
结论: 1. 当初始序列基本有序时,直接插入排序最快,快速排序慢(在初始序列较为混乱时快);
2. 归并排序对初始序列排序不敏感,速度稳定;
3. 记录个数较少,采用插入排序或选择排序,记录本身信息量大,采用简单选择排序;
4. 记录较大,采用快速排序、堆排序、归并排序。