1. update code and md format

2. update PrintUtil.h format
This commit is contained in:
Listening 2023-01-11 10:44:51 +08:00
parent 73815e751c
commit aa8f460c36
3 changed files with 40 additions and 56 deletions

View File

@ -11,43 +11,36 @@
* [left, mid] * [left, mid]
* [mid + 1, right] * [mid + 1, right]
*/ */
void merge(int arr[], int left, int mid, int right) void merge(int nums[], int left, int mid, int right) {
{ // 开辟一个新的数组,将原数组数据片段存进去
int aux[right - left + 1]; // 开辟一个新的数组,将原数组数据片段存进去 int tmp[right - left + 1];
for (int m = left; m <= right; m++) for (int m = left; m <= right; m++) {
{ tmp[m - left] = nums[m];
aux[m - left] = arr[m];
} }
// i和j分别指向两个数组开头部分
int i = left, j = mid + 1; // i和j分别指向两个数组开头部分 int i = left, j = mid + 1;
// 通过覆盖原数组 nums 来合并左子数组和右子数组
for (int k = left; k <= right; k++) for (int k = left; k <= right; k++) {
{ if (i > mid) {
if (i > mid) nums[k] = tmp[j - left];
{
arr[k] = aux[j - left];
j++; j++;
} }
else if (j > right) else if (j > right) {
{ nums[k] = tmp[i - left];
arr[k] = aux[i - left];
i++; i++;
} }
else if (aux[i - left] < aux[j - left]) else if (tmp[i - left] < tmp[j - left]) {
{ nums[k] = tmp[i - left];
arr[k] = aux[i - left];
i++; i++;
} }
else else {
{ nums[k] = tmp[j - left];
arr[k] = aux[j - left];
j++; j++;
} }
} }
} }
void mergeSort(int nums[], int left, int right) void mergeSort(int nums[], int left, int right) {
{
// 终止条件 // 终止条件
if (left >= right) if (left >= right)
return; // 当子数组长度为 1 时终止递归 return; // 当子数组长度为 1 时终止递归
@ -60,13 +53,12 @@ void mergeSort(int nums[], int left, int right)
} }
/* Driver Code */ /* Driver Code */
int main() int main() {
{
/* 归并排序 */ /* 归并排序 */
int nums[8] = {7, 3, 2, 6, 0, 1, 5, 4}; int nums[8] = {7, 3, 2, 6, 0, 1, 5, 4};
mergeSort(nums, 0, 7); mergeSort(nums, 0, 7);
printf("归并排序完成后 nums = ");
printArray(nums, 8); printArray(nums, 8);
return 0; return 0;

View File

@ -14,10 +14,9 @@
/** /**
* @brief Print an Array * @brief Print an Array
* *
* @param arr * @param arr array
* @param n * @param n array length
*/ */
static void printArray(int* arr, int n) static void printArray(int* arr, int n)
{ {
printf("["); printf("[");

View File

@ -342,43 +342,36 @@ comments: true
* 左子数组区间 [left, mid] * 左子数组区间 [left, mid]
* 右子数组区间 [mid + 1, right] * 右子数组区间 [mid + 1, right]
*/ */
void merge(int arr[], int left, int mid, int right) void merge(int nums[], int left, int mid, int right) {
{ // 开辟一个新的数组,将原数组数据片段存进去
int aux[right - left + 1]; // 开辟一个新的数组,将原数组数据片段存进去 int tmp[right - left + 1];
for (int m = left; m <= right; m++) for (int m = left; m <= right; m++) {
{ tmp[m - left] = nums[m];
aux[m - left] = arr[m];
} }
// i和j分别指向两个数组开头部分
int i = left, j = mid + 1; // i和j分别指向两个数组开头部分 int i = left, j = mid + 1;
// 通过覆盖原数组 nums 来合并左子数组和右子数组
for (int k = left; k <= right; k++) for (int k = left; k <= right; k++) {
{ if (i > mid) {
if (i > mid) nums[k] = tmp[j - left];
{
arr[k] = aux[j - left];
j++; j++;
} }
else if (j > right) else if (j > right) {
{ nums[k] = tmp[i - left];
arr[k] = aux[i - left];
i++; i++;
} }
else if (aux[i - left] < aux[j - left]) else if (tmp[i - left] < tmp[j - left]) {
{ nums[k] = tmp[i - left];
arr[k] = aux[i - left];
i++; i++;
} }
else else {
{ nums[k] = tmp[j - left];
arr[k] = aux[j - left];
j++; j++;
} }
} }
} }
void mergeSort(int nums[], int left, int right) void mergeSort(int nums[], int left, int right) {
{
// 终止条件 // 终止条件
if (left >= right) if (left >= right)
return; // 当子数组长度为 1 时终止递归 return; // 当子数组长度为 1 时终止递归