From aa8f460c36641f5598878b5ce7a05b3cb07992e6 Mon Sep 17 00:00:00 2001 From: Listening <120311070@qq.com> Date: Wed, 11 Jan 2023 10:44:51 +0800 Subject: [PATCH] 1. update code and md format 2. update PrintUtil.h format --- codes/c/chapter_sorting/merge_sort.c | 48 ++++++++++++---------------- codes/c/include/PrintUtil.h | 5 ++- docs/chapter_sorting/merge_sort.md | 43 +++++++++++-------------- 3 files changed, 40 insertions(+), 56 deletions(-) diff --git a/codes/c/chapter_sorting/merge_sort.c b/codes/c/chapter_sorting/merge_sort.c index e2f761730..451e1287d 100644 --- a/codes/c/chapter_sorting/merge_sort.c +++ b/codes/c/chapter_sorting/merge_sort.c @@ -11,43 +11,36 @@ * 左子数组区间 [left, mid] * 右子数组区间 [mid + 1, right] */ -void merge(int arr[], int left, int mid, int right) -{ - int aux[right - left + 1]; // 开辟一个新的数组,将原数组数据片段存进去 - for (int m = left; m <= right; m++) - { - aux[m - left] = arr[m]; +void merge(int nums[], int left, int mid, int right) { + // 开辟一个新的数组,将原数组数据片段存进去 + int tmp[right - left + 1]; + for (int m = left; m <= right; m++) { + tmp[m - left] = nums[m]; } - - int i = left, j = mid + 1; // i和j分别指向两个数组开头部分 - - for (int k = left; k <= right; k++) - { - if (i > mid) - { - arr[k] = aux[j - left]; + // i和j分别指向两个数组开头部分 + int i = left, j = mid + 1; + // 通过覆盖原数组 nums 来合并左子数组和右子数组 + for (int k = left; k <= right; k++) { + if (i > mid) { + nums[k] = tmp[j - left]; j++; } - else if (j > right) - { - arr[k] = aux[i - left]; + else if (j > right) { + nums[k] = tmp[i - left]; i++; } - else if (aux[i - left] < aux[j - left]) - { - arr[k] = aux[i - left]; + else if (tmp[i - left] < tmp[j - left]) { + nums[k] = tmp[i - left]; i++; } - else - { - arr[k] = aux[j - left]; + else { + nums[k] = tmp[j - left]; j++; } } } -void mergeSort(int nums[], int left, int right) -{ +void mergeSort(int nums[], int left, int right) { // 终止条件 if (left >= right) return; // 当子数组长度为 1 时终止递归 @@ -60,13 +53,12 @@ void mergeSort(int nums[], int left, int right) } /* Driver Code */ -int main() -{ +int main() { /* 归并排序 */ int nums[8] = {7, 3, 2, 6, 0, 1, 5, 4}; mergeSort(nums, 0, 7); - + printf("归并排序完成后 nums = "); printArray(nums, 8); return 0; diff --git a/codes/c/include/PrintUtil.h b/codes/c/include/PrintUtil.h index 59a8eac1b..8efece999 100644 --- a/codes/c/include/PrintUtil.h +++ b/codes/c/include/PrintUtil.h @@ -14,10 +14,9 @@ /** * @brief Print an Array * - * @param arr - * @param n + * @param arr array + * @param n array length */ - static void printArray(int* arr, int n) { printf("["); diff --git a/docs/chapter_sorting/merge_sort.md b/docs/chapter_sorting/merge_sort.md index a8addec65..ba459281c 100644 --- a/docs/chapter_sorting/merge_sort.md +++ b/docs/chapter_sorting/merge_sort.md @@ -342,43 +342,36 @@ comments: true * 左子数组区间 [left, mid] * 右子数组区间 [mid + 1, right] */ - void merge(int arr[], int left, int mid, int right) - { - int aux[right - left + 1]; // 开辟一个新的数组,将原数组数据片段存进去 - for (int m = left; m <= right; m++) - { - aux[m - left] = arr[m]; + void merge(int nums[], int left, int mid, int right) { + // 开辟一个新的数组,将原数组数据片段存进去 + int tmp[right - left + 1]; + for (int m = left; m <= right; m++) { + tmp[m - left] = nums[m]; } - - int i = left, j = mid + 1; // i和j分别指向两个数组开头部分 - - for (int k = left; k <= right; k++) - { - if (i > mid) - { - arr[k] = aux[j - left]; + // i和j分别指向两个数组开头部分 + int i = left, j = mid + 1; + // 通过覆盖原数组 nums 来合并左子数组和右子数组 + for (int k = left; k <= right; k++) { + if (i > mid) { + nums[k] = tmp[j - left]; j++; } - else if (j > right) - { - arr[k] = aux[i - left]; + else if (j > right) { + nums[k] = tmp[i - left]; i++; } - else if (aux[i - left] < aux[j - left]) - { - arr[k] = aux[i - left]; + else if (tmp[i - left] < tmp[j - left]) { + nums[k] = tmp[i - left]; i++; } - else - { - arr[k] = aux[j - left]; + else { + nums[k] = tmp[j - left]; j++; } } } - void mergeSort(int nums[], int left, int right) - { + void mergeSort(int nums[], int left, int right) { // 终止条件 if (left >= right) return; // 当子数组长度为 1 时终止递归