排序方法 | 适用性 | 稳定性 | 时间复杂度 | 空间复杂度 | 一次排序之后 | 初态影响 |
---|---|---|---|---|---|---|
直接插入排序 | 适用于顺序存储、链式存储线性表 | 不会出现相对位置变化,稳定 | 最好:表有序,O(n)最差:表逆序,比较2+…n平均:O(n²) | O(1) | 局部有序子序列 | |
折半插入排序 | 顺序表 | 稳定 | 最好:O(n(log2n);最差:O(n²)平均:O(n²) | O(1) | ||
希尔排序(本质是直插) | 适用于线性表为顺序存储 | 不稳定 | N在某个特定范围:O( n 1 . 3 n^1.3 n1.3);最坏情况:O(n²) | O(1) | ||
冒泡排序 | 顺序表链表 | 稳定 | 最好:O(n)初始序列有序;最坏:O(n²)初始序列逆序;比较次数:n(n-1)/2;移动次数:3n(n-1)/2;平均:O(n²) | O(1) | 每趟排序都有一个元素在最终的位置上。产生的子序列是全局有序的 | |
快速排序 | 顺序表 | 不稳定 | 最好:O(nlog2n)最坏:O(n²);快速排序是内部排序中平均性能最优的排序算法 | 栈深度:最好:O(log2n);最坏: O(n)平均:O(log2n) | 确定枢轴元素的最终位置 | |
简单选择排序 | 不稳定 | 移动次数:不超过3(n-1)O(n²) | ||||
O(1) | 局部有序子序列 | |||||
堆排序 | 不稳定 | 建堆O(n);好坏平均O(nlog2n) | O(1) | 局部有序子序列 | ||
归并排序 | 稳定 | O(n) | ||||
基数排序 | 稳定 | R个队列:R个队头指针R个队尾指针 O(n) | ||||
多路归并排序外部排序 |
1.基本概念
- 1.稳定性
- 2.时间、空间复杂度
2.内部排序
-
1.插入排序
- 1.直接插入排序
- 2.折半插入排序
- 3.希尔排序
-
2.交换排序
- 1.交换排序
- 2.快速排序
-
3.选择排序
- 1.简单选择排序
- 2.堆排序
-
4.归并排序
-
5.基数排序
3.外部排序
- 1.多路归并排序