c语言归并排序程序代码
时间: 2023-11-17 21:00:12 浏览: 96
下面是C语言归并排序的程序代码,其中包括递归函数_MergeSort和主函数MergeSort:
```
//辅助归并排序递归的子函数
void _MergeSort(int* a, int* tmp, int begin, int end) {
if (begin >= end) return;//单个或者不存在其区间就结束递归
//类似于后序:
int middle = (begin + end) / 2;
int begin1 = begin;
int end1 = middle;
int begin2 = middle + 1;
int end2 = end;
_MergeSort(a, tmp, begin1, end1);
_MergeSort(a, tmp, begin2, end2);
//此时认为 [begin1, end1] 和 [begin2, end2]两段区间上有序
//归并算法
int i = begin;
while (begin1 <= end1 && begin2 <= end2) {
if (a[begin1] <= a[begin2]) {
tmp[i++] = a[begin1++];
} else {
tmp[i++] = a[begin2++];
}
}
while (begin1 <= end1) {
tmp[i++] = a[begin1++];
}
while (begin2 <= end2) {
tmp[i++] = a[begin2++];
}
memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));//内存操作函数,可以将整个数组的数复制过去
}
//归并排序 递归版本
void MergeSort(int* a, int n) {
//首先malloc一个数组
int* tmp = (int*)malloc(sizeof(int) * n);
if (tmp == NULL) {
printf("未能申请到内存\n");
exit(-1);
}
//第一次传入 0 和 n - 1 传入闭区间
_MergeSort(a, tmp, 0, n - 1);
free(tmp);
}
```
阅读全文