C语言 归并排序函数
时间: 2024-08-19 18:02:58 浏览: 52
C语言中的归并排序通过递归实现。归并排序是一种分治策略的典型应用,它将大数组分成两个较小的部分,对每个部分进行排序,然后再合并它们。这里有两个关键函数:
1. **_MergeSort** 函数[^1]:
```c
void _MergeSort(int* arr, int left, int right, int* temp) {
if (left < right) {
int mid = left + (right - left) / 2;
_MergeSort(arr, left, mid, temp);
_MergeSort(arr, mid + 1, right, temp);
merge(arr, left, mid, right, temp);
}
}
// 这里省略了merge函数的代码,它负责合并两个已排序的部分
```
这个函数首先检查左边界`left`是否小于右边界`right`,如果条件成立,会找到中间位置`mid`,然后递归地对左半部分和右半部分进行排序,最后调用`merge`函数来合并这两个有序部分。
2. **merge** 函数[^2]:
```c
void merge(int arr[], int l, int m, int r, int* temp) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
// 把左边数组复制到临时数组L
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
// 把右边数组复制到临时数组R
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
// 合并两个排序好的部分回原数组
i = 0; j = 0; k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j])
arr[k++] = L[i++];
else
arr[k++] = R[j++];
}
// 如果有剩余元素,把剩下的部分添加回去
while (i < n1)
arr[k++] = L[i++];
while (j < n2)
arr[k++] = R[j++];
}
```
当整个过程完成时,输入数组`arr`就会被按照升序排列。
阅读全文