非计算机专业出身的我,算法0基础,算法太欠缺了,最近一段时间在恶补算法。
好了,下面把自己做的排序算法汇总表帖出来,与大家共享。
分类 |
排序算法 |
时间复杂度 |
空间复杂度 |
稳定性 |
备注 |
插入排序 |
直接插入排序 |
O(n^2) |
O(1) |
稳定排序 |
|
链表插入排序 |
O(n^2) |
O(n) |
稳定排序 |
| |
希尔排序 |
O(n(lbn)^2) |
O(1) |
不稳定 |
| |
选择排序 |
直接选择排序 |
O(n^2) |
O(1) |
稳定排序 |
|
堆排序 |
O(nlbn) |
O(1) |
不稳定 |
| |
锦标赛(树形)排序 |
O(nlbn) |
O(n) |
不稳定 |
| |
交换排序 |
冒泡排序 |
O(n^2) |
O(1) |
稳定排序 |
|
快速排序 |
O(nlbn) |
O(lbn) |
不稳定 |
| |
归并排序 |
二路归并排序 |
O(nlbn) |
O(n) |
稳定排序 |
|
基数(桶)排序 |
基数排序 |
O(mn) |
O(n) |
稳定排序 |
m常很小,整数适用 |
下面这张表来自我最近看的软考书籍
类别 |
排序方法 |
时间复杂度 |
空间复杂度 |
稳定性 | ||
平均情况 |
最好情况 |
最坏情况 |
辅助存储 | |||
插入排序 |
直接插入 |
O(n^2) |
O(n) |
O(n^2) |
O(1) |
稳定 |
Shell排序 |
O(n^1.3) |
O(n) |
O(n^2) |
O(1) |
不稳定 | |
选择排序 |
直接选择 |
O(n^2) |
O(n^2) |
O(n^2) |
O(1) |
不稳定 |
堆排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(1) |
不稳定 | |
交换排序 |
冒泡排序 |
O(n^2) |
O(n) |
O(n^2) |
O(1) |
稳定 |
快速排序 |
O(nlog2n) |
O(nlog2n) |
O(n^2) |
O(nlog2n) |
不稳定 | |
归并排序 |
二路归并 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
O(n) |
稳定 |
基数(桶)排序 |
基数排序 |
O(d(r+n)) |
O(d(rd+n)) |
O(d(r+n)) |
O(rd+n)) |
稳定 |
注:基数排序的复杂度中,r代表关键字的基数,d代表长度,n代表关键字的个数。