算法的时间复杂度排序
O(1) < O( l o g 2 n log_2n log2n) < O( n n n) < O( n l o g 2 n nlog_2n nlog2n) < O( n 2 n^2 n2) < O( n 3 n^3 n3) < O( n k n^k nk) < O( 2 n 2^n 2n)
注意:这里的logn 均为以2为底
- | 排序算法 | 平均时间 | 最差情形 | 稳定度 | 额外空间 | 备注 |
---|---|---|---|---|---|---|
1 | 冒泡排序 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | 稳定 | O(1) | n小时较好 |
2 | 交换排序 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | 不稳定 | O(1) | n小时较好 |
3 | 选择排序 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | 不稳定 | O(1) | n小时较好 |
4 | 插入排序 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | 稳定 | O(1) | 大部门已排序时较好 |
5 | 基数排序 | O( l o g R B log_RB logRB) | O( l o g R B log_RB logRB) | 稳定 | O( n n n) | B是真数(0-9) R是基数(个十百) |
6 | 希尔排序 | O( n l o g 2 n nlog_2n nlog2n) | O( n s n^s ns) 1<s<2 | 不稳定 | O(1) | s是所选分组 |
7 | 快速排序 | O( n l o g 2 n nlog_2n nlog2n) | O( n 2 n^2 n2) | 不稳定 | O( n l o g 2 n nlog_2n nlog2n) | n大时较好 |
8 | 归并排序 | O( n l o g 2 n nlog_2n nlog2n) | O( n l o g 2 n nlog_2n nlog2n) | 稳定 | O(1) | n大时较好 |
9 | 堆排序 | O( n l o g 2 n nlog_2n nlog2n) | O( n l o g 2 n nlog_2n nlog2n) | 不稳定 | O(1) | n大时较好 |