考研408「内部排序算法比较与应用」知识点深度解析
一、排序算法核心指标
1.1 时间复杂度
| 算法类型 | 最好情况 | 平均情况 | 最坏情况 |
|---|---|---|---|
| 直接插入排序 | O(n)O(n)O(n) | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) |
| 冒泡排序 | O(n)O(n)O(n) | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) |
| 简单选择排序 | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) | O(n2)O(n^2)O(n2) |
| 快速排序 | O(nlogn)O(n\log n)O(nlogn) | O(nlogn)O(n\log n)O(nlogn) | O(n2)O(n^2)O(n2) |
| 堆排序 | O(nlogn)O(n\log n)O(nlogn) | O(nlogn)O(n\log n)O(nlogn) | O(nlogn)O(n\log n)O(nlogn) |
| 归并排序 | O(nlogn)O(n\log n)O(nlogn) | O(nlogn)O(n\log n)O(nlogn) | O(nlogn)O(n\log n)O(nlogn) |
| 基数排序 | 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(d(n+r))O(d(n + r))O(d(n+r)) |
公式说明:
- ddd为关键字位数,rrr为基数(如十进制r=10r=10r=10)。
1.2 空间复杂度
| 算法类型 | 空间复杂度 |
|---|---|
| 直接插入排序 | O(1)O(1)O(1) |
| 冒泡排序 | O(1)O(1)O(1) |
| 简单选择排序 | O(1)O(1)O(1) |
| 快速排序 | O(logn)O(\log n)O(logn) |
| 堆排序 | O(1)O(1)O(1) |
| 归并排序 | O(n)O(n)O(n) |
| 基数排序 | O(n+r)O(n + r)O(n+r) |
公式说明:
- 快速排序递归栈空间深度为O(logn)O(\log n)O(logn)。
1.3 稳定性
| 算法类型 | 稳定性 |
|---|---|
| 直接插入排序 | 稳定 |
| 冒泡排序 | 稳定 |
| 简单选择排序 | 不稳定 |
| 快速排序 | 不稳定 |
| 堆排序 | 不稳定 |
| 归并排序 | 稳定 |
| 基数排序 | 稳定 |
二、内部排序算法详解
2.1 堆排序(Heap Sort)
2.1.1 定义与核心思想
堆排序是一种树形选择排序,利用堆结构高效选择极值。其核心步骤为:
- 建堆:将无序数组调整为大根堆(或小根堆)。
- 调整堆:反复交换堆顶元素与末尾元素,并重新调整堆。
时间复杂度:
- 建堆:O(n)O(n)O(n)
- 调整堆:O(nlogn)O(n\log n)O(nlogn)
- 总体:O(nlogn)O(n\log n)O(nlogn)
空间复杂度:O(1)O(1)O(1)(原地排序)
稳定性:不稳定(相同元素可能交换位置)。
2.1.2 算法实现
C语言实现:
void heapify(int arr[],

最低0.47元/天 解锁文章
6万+

被折叠的 条评论
为什么被折叠?



