非计算机专业出身的我,算法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代表关键字的个数。