Several bug fixes (#984)

* Fix quick_sort.md

* Disable instant loading for mathjax rendering

* Fix the summary.md of chapter_sorting

* Two bug fixes
This commit is contained in:
Yudong Jin
2023-12-11 00:42:00 +08:00
committed by GitHub
parent b10091c5f9
commit 2e130d4bbc
6 changed files with 6 additions and 5 deletions
+1 -1
View File
@@ -91,7 +91,7 @@
## 尾递归优化
**在某些输入下,快速排序可能占用空间较多**。以完全序的输入数组为例,设递归中的子数组长度为 $m$ ,每轮哨兵划分操作都将产生长度为 $0$ 的左子数组和长度为 $m - 1$ 的右子数组,这意味着每一层递归调用减少的问题规模非常小(只减少一个元素),递归树的高度会达到 $n - 1$ ,此时需要占用 $O(n)$ 大小的栈帧空间。
**在某些输入下,快速排序可能占用空间较多**。以完全序的输入数组为例,设递归中的子数组长度为 $m$ ,每轮哨兵划分操作都将产生长度为 $0$ 的左子数组和长度为 $m - 1$ 的右子数组,这意味着每一层递归调用减少的问题规模非常小(只减少一个元素),递归树的高度会达到 $n - 1$ ,此时需要占用 $O(n)$ 大小的栈帧空间。
为了防止栈帧空间的累积,我们可以在每轮哨兵排序完成后,比较两个子数组的长度,**仅对较短的子数组进行递归**。由于较短子数组的长度不会超过 $n / 2$ ,因此这种方法能确保递归深度不超过 $\log n$ ,从而将最差空间复杂度优化至 $O(\log n)$ 。代码如下所示: