Number the H1 and H2 headings.

This commit is contained in:
Yudong Jin
2023-01-31 03:37:50 +08:00
parent dbbc1adc4f
commit eb0afc98ec
44 changed files with 263 additions and 257 deletions
+4 -4
View File
@@ -2,7 +2,7 @@
comments: true
---
# 归并排序
# 11.5. 归并排序
「归并排序 Merge Sort」是算法中“分治思想”的典型体现,其有「划分」和「合并」两个阶段:
@@ -13,7 +13,7 @@ comments: true
<p align="center"> Fig. 归并排序两阶段:划分与合并 </p>
## 算法流程
## 11.5.1. 算法流程
**「递归划分」** 从顶至底递归地 **将数组从中点切为两个子数组**,直至长度为 1
@@ -453,7 +453,7 @@ comments: true
- `nums` 的待合并区间为 `[left, right]` ,而因为 `tmp` 只复制了 `nums` 该区间元素,所以 `tmp` 对应区间为 `[0, right - left]` ,**需要特别注意代码中各个变量的含义**。
- 判断 `tmp[i]` 和 `tmp[j]` 的大小的操作中,还 **需考虑当子数组遍历完成后的索引越界问题**,即 `i > leftEnd` 和 `j > rightEnd` 的情况,索引越界的优先级是最高的,例如如果左子数组已经被合并完了,那么不用继续判断,直接合并右子数组元素即可。
## 算法特性
## 11.5.2. 算法特性
- **时间复杂度 $O(n \log n)$** :划分形成高度为 $\log n$ 的递归树,每层合并的总操作数量为 $n$ ,总体使用 $O(n \log n)$ 时间。
- **空间复杂度 $O(n)$** :需借助辅助数组实现合并,使用 $O(n)$ 大小的额外空间;递归深度为 $\log n$ ,使用 $O(\log n)$ 大小的栈帧空间。
@@ -461,7 +461,7 @@ comments: true
- **稳定排序**:在合并时可保证相等元素的相对位置不变。
- **非自适应排序**:对于任意输入数据,归并排序的时间复杂度皆相同。
## 链表排序 *
## 11.5.3. 链表排序 *
归并排序有一个很特别的优势,用于排序链表时有很好的性能表现,**空间复杂度可被优化至 $O(1)$** ,这是因为: