This commit is contained in:
krahets
2023-03-25 18:41:53 +08:00
parent 0dfdcf0bab
commit aedf4c4dff
6 changed files with 38 additions and 57 deletions

View File

@@ -461,17 +461,11 @@ comments: true
## 11.4.2.   算法特性
**平均时间复杂度 $O(n \log n)$** :平均情况下,哨兵划分的递归层数为 $\log n$ ,每层中的总循环数为 $n$ ,总体使用 $O(n \log n)$ 时间。
**时间复杂度 $O(n \log n)$** :平均情况下,哨兵划分的递归层数为 $\log n$ ,每层中的总循环数为 $n$ ,总体使用 $O(n \log n)$ 时间。最差情况下,每轮哨兵划分操作都将长度为 $n$ 的数组划分为长度为 $0$ 和 $n - 1$ 的两个子数组,此时递归层数达到 $n$ 层,每层中的循环数为 $n$ ,总体使用 $O(n^2)$ 时间,因此是“非稳定排序”。
**最差时间复杂度 $O(n^2)$** 最差情况下,哨兵划分操作将长度为 $n$ 的数组划分为长度为 $0$ 和 $n - 1$ 的两个子数组,此时递归层数达到 $n$ 层,每层中的循环数为 $n$ ,总体使用 $O(n^2)$ 时间
**间复杂度 $O(n)$** 输入数组完全倒序下,达到最差递归深度 $n$ 。由于未借助辅助数组空间,因此是“原地排序”
**空间复杂度 $O(n)$** :输入数组完全倒序下,达到最差递归深度 $n$
**原地排序**:只在递归中使用 $O(\log n)$ 大小的栈帧空间。
**非稳定排序**:哨兵划分操作可能改变相等元素的相对位置。
**自适应排序**:最差情况下,时间复杂度劣化至 $O(n^2)$ 。
**非稳定排序**:哨兵划分最后一步可能会将基准数交换至相等元素的右边
## 11.4.3.   快排为什么快?