##数据结构—-排序
排序算法 | 时间复杂度 | 空间复杂度 | 稳定性 | 特征1: | 特征2: | ||
最好 | 平均 | 最坏 | |||||
直接插入 | O(n) O ( n ) | O(n2) O ( n 2 ) | O(n2) O ( n 2 ) | O(1) O ( 1 ) | 1 | 每趟确定一个最值 | 特征2: |
冒泡 | O(n) O ( n ) | O(n2) O ( n 2 ) | O(n2) O ( n 2 ) | O(1) O ( 1 ) | 1 | 每趟确定一个最值 | 可能循环完成之前就排好序了 |
简单选择 | O(n2) O ( n 2 ) | O(n2) O ( n 2 ) | O(n2) O ( n 2 ) | O(1) O ( 1 ) | 0 | 每趟确定一个最值 | 特征2: |
希尔 | O(n(1.3)) O ( n ( 1.3 ) ) | O(1) O ( 1 ) | 0 | 最后一趟才有序 | 最小增量排序 | ||
快速 | O(nlog2n) O ( n l o g 2 n ) | O(nlog2n) O ( n l o g 2 n ) | O(n2) O ( n 2 ) | O(log2n) O ( l o g 2 n ) | 0 | 最后一趟才有序 | 分治法,需要一个枢轴 |
堆排序 | O(nlog2n) O ( n l o g 2 n ) | O(nlog2n) O ( n l o g 2 n ) | O(nlog2n) O ( n l o g 2 n ) | O(1) O ( 1 ) | 0 | 每趟确定一个最值 | 建堆-取根-调整堆 |
归并排序 | O(nlog2n) O ( n l o g 2 n ) | O(nlog2n) O ( n l o g 2 n ) | O(nlog2n) O ( n l o g 2 n ) | O(n) O ( n ) | 1 | 最后一趟才有序 | 1、划分 2、归并 |
基数排序 | O(d(n+r)) O ( d ( n + r ) ) | O(d(n+r)) O ( d ( n + r ) ) | O(d(n+r)) O ( d ( n + r ) ) | O(r) O ( r ) | 1 | 每一趟按不同关键字有序 | 分配、收集 |
最后一趟才有序:最后一趟之前,整体都是无序的(不存在连续的顺序子序列)
每趟确定一个最值:在最后一趟前,存在连续的顺序子序列
基数排序
LSD: 先排次要的关键字,最后排主要的关键字
MSD:先排主关键字,最后排最低层次的关键字基数排序中LSD方法:若有N种关键字类型(就是存在个位、十位、百位。。。)那么对于Key(i)【0<= i <= N-2】时候要用稳定的排序方式。
未完待续–