用c++写一个合并排序算法
时间: 2023-01-31 14:03:24 浏览: 55
合并排序是一种分治算法,它将一个大的数组分成两个小的数组,分别对它们进行排序,然后将排序后的两个数组合并在一起。这里是用 C 语言写的一个合并排序算法的例子:
```
#include <stdio.h>
#include <stdlib.h>
void merge(int *arr, int start, int mid, int end) {
// 创建两个指针分别指向两个数组的开头
int i = start, j = mid + 1;
// 创建一个临时数组用来存放合并后的结果
int *temp = (int *)malloc((end - start + 1) * sizeof(int));
int k = 0;
// 循环比较两个数组的值,将小的数字放入临时数组
while (i <= mid && j <= end) {
if (arr[i] < arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
// 将剩余的数字放入临时数组
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= end) {
temp[k++] = arr[j++];
}
// 将临时数组的值赋回原数组
for (int l = 0; l < k; l++) {
arr[start + l] = temp[l];
}
free(temp);
}
void merge_sort(int *arr, int start, int end) {
// 如果数组中只有一个元素,则直接返回
if (start >= end) {
return;
}
// 将数组分成两半
int mid = (start + end) / 2;
// 对两个数组进行排序
merge_sort(arr, start, mid);
merge_sort(arr, mid + 1, end);
// 将两个排序后的数