最近在阅读redis底层相关的知识,但是接近考研复试阶段,不管能否进入复试,复习一下上机内容是有必要的。而上机操作最基本的是排序,排序算法在找工作时也可能被面试官问到,所以在此,将复习的情况记录下。
首先看一下基本排序算法有哪些,以及相关的特点:
| 排序思想 | 排序方法 | 时间复杂度 | 空间复杂度 | 稳定性 |
内部排序 |
插入排序 | 直接插入排序 | O(n2) | O(1) | 稳定 |
折半插入排序 | O(n2) | O(1) | 稳定 | ||
希尔排序 | 取决于增量序列 | O(1) | 不稳定 | ||
交换排序 | 起泡排序 | O(n2) | O(1) | 稳定 | |
快速排序 | O(nlog2n) | O(log2n) | 不稳定 | ||
选择排序 | 简单选择排序 | O(n2) | O(1) | 不稳定 | |
堆排序 | O(nlog2n) | O(1) | 不稳定 | ||
- | 2-路归并排序 | O(nlog2n) | O(n) | 稳定 | |
- | 基数排序(r基,d位) | O(d(n+r)) | O(r) | 稳定 | |
外部排序 | 归并排序 | 多路归并排序 | - | - | - |
时间复杂度计算规则特殊说明:
1、加法规则:T(n)=T1(n)+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n)))
2、乘法规则:T(n)=T1(n)*T2(n)=O(f(n))*O(g(n))=O(f(n)*g(n))
以后的篇幅中,将针对各个排序算法进行C语言实现,加强自身记忆。