Skip to content

Commit

Permalink
feat: update doc for 2-2-11
Browse files Browse the repository at this point in the history
  • Loading branch information
ikesnowy committed Apr 9, 2022
1 parent 2605b05 commit bf83b40
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions docs/content/2-2-11.md
Expand Up @@ -18,15 +18,17 @@ date: 2018-07-04 15:45:35

如果大于的话就不需要调用归并了,直接首尾相接即可。

每次归并都需要两个数组,一个用于存放归并结果,这个数组中的内容是无关紧要的;
归并的空间优化类似于左手倒右手,从一个数组读数据写到另一个数组中去,下一次归并的时候就可以反过来操作,从而节省数组空间。

另一个则保存了归并前的数组,用于实际的归并过程。
每次归并都需要两个数组,一个用于存放归并结果,这个数组中的内容是无关紧要的(`Merge()` 方法中的 `dst` 数组)

另一个则保存了归并前的数组,用于实际的归并过程(`src` 数组)。

归并结束后,前一个数组变成归并后的有序结果(也就是下一次归并时的「归并前数组」),后一个数组中的内容则不再有用。

我们可以看到这两个数组的角色在下一次归并时正好可以互换。

要注意的是,归并次数总是一个**奇数**左侧归并+右侧归并+总归并),因此在第一次调用 Sort 方法时应该把 aux 和 a 互换传入。
要注意的是,交换次数总是一个**奇数**左侧排序+右侧排序+总归并),因此在第一次调用 Sort 方法时应该把 aux 和 a 互换传入。

## 代码

Expand Down Expand Up @@ -96,6 +98,7 @@ public class MergeSortX : BaseSort
Array.Copy(src, lo, dst, lo, hi - lo + 1);
return;
}

Merge(src, dst, lo, mid, hi);
}

Expand All @@ -117,3 +120,5 @@ public class MergeSortX : BaseSort
## 另请参阅

[Merge 库](https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp/tree/master/2%20Sorting/2.2/Merge)

[Github 上的讨论](https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp/issues/612)

0 comments on commit bf83b40

Please sign in to comment.