mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-16 08:56:05 +00:00
Unify punctuation.
This commit is contained in:
@@ -2,17 +2,17 @@
|
||||
|
||||
「归并排序 Merge Sort」基于分治思想实现排序,包含“划分”和“合并”两个阶段:
|
||||
|
||||
1. **划分阶段**:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题;
|
||||
2. **合并阶段**:当子数组长度为 1 时终止划分,开始合并,持续地将左右两个较短的有序数组合并为一个较长的有序数组,直至结束;
|
||||
1. **划分阶段**:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。
|
||||
2. **合并阶段**:当子数组长度为 1 时终止划分,开始合并,持续地将左右两个较短的有序数组合并为一个较长的有序数组,直至结束。
|
||||
|
||||

|
||||
|
||||
## 算法流程
|
||||
|
||||
“划分阶段”从顶至底递归地将数组从中点切为两个子数组,直至长度为 1 ;
|
||||
“划分阶段”从顶至底递归地将数组从中点切为两个子数组:
|
||||
|
||||
1. 计算数组中点 `mid` ,递归划分左子数组(区间 `[left, mid]` )和右子数组(区间 `[mid + 1, right]` );
|
||||
2. 递归执行步骤 `1.` ,直至子数组区间长度为 1 时,终止递归划分;
|
||||
1. 计算数组中点 `mid` ,递归划分左子数组(区间 `[left, mid]` )和右子数组(区间 `[mid + 1, right]` )。
|
||||
2. 递归执行步骤 `1.` ,直至子数组区间长度为 1 时,终止递归划分。
|
||||
|
||||
“合并阶段”从底至顶地将左子数组和右子数组合并为一个有序数组。需要注意的是,从长度为 1 的子数组开始合并,合并阶段中的每个子数组都是有序的。
|
||||
|
||||
@@ -155,6 +155,6 @@
|
||||
归并排序在排序链表时具有显著优势,空间复杂度可以优化至 $O(1)$ ,原因如下:
|
||||
|
||||
- 由于链表仅需改变指针就可实现节点的增删操作,因此合并阶段(将两个短有序链表合并为一个长有序链表)无需创建辅助链表。
|
||||
- 通过使用“迭代划分”替代“递归划分”,可省去递归使用的栈帧空间;
|
||||
- 通过使用“迭代划分”替代“递归划分”,可省去递归使用的栈帧空间。
|
||||
|
||||
具体实现细节比较复杂,有兴趣的同学可以查阅相关资料进行学习。
|
||||
|
||||
Reference in New Issue
Block a user