Add merge sort, and sorting algorithm.

This commit is contained in:
krahets
2022-11-24 01:12:14 +08:00
parent 4290026e0e
commit 0a52e531c1
20 changed files with 155 additions and 79 deletions

View File

@@ -9,10 +9,14 @@ public class merge_sort {
* 右子数组区间 [mid + 1, right]
*/
static void merge(int[] nums, int left, int mid, int right) {
int[] tmp = Arrays.copyOfRange(nums, left, right + 1); // 初始化辅助数组
int leftStart = left - left, leftEnd = mid - left, // 左子数组的起始索引和结束索引
rightStart = mid + 1 - left, rightEnd = right - left; // 子数组的起始索引和结束索引
int i = leftStart, j = rightStart; // i,j 分别指向左子数组、右子数组的首元素
// 初始化辅助数组
int[] tmp = Arrays.copyOfRange(nums, left, right + 1);
// 子数组的起始索引和结束索引
int leftStart = left - left, leftEnd = mid - left;
// 右子数组的起始索引和结束索引
int rightStart = mid + 1 - left, rightEnd = right - left;
// i, j 分别指向左子数组、右子数组的首元素
int i = leftStart, j = rightStart;
// 通过覆盖原数组 nums 来合并左子数组和右子数组
for (int k = left; k <= right; k++) {
// 若 “左子数组已全部合并完”,则选取右子数组元素,并且 j++