用c++写一个合并排序算法
时间: 2024-02-18 17:33:20 浏览: 22
好的,这是用 C 语言写的合并排序算法的一个简单例子:
```
#include <stdio.h>
#include <stdlib.h>
// 合并两个已排序的数组
void merge(int *a, int *b, int *c, int m, int n) {
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (a[i] < b[j]) {
c[k] = a[i];
i++;
} else {
c[k] = b[j];
j++;
}
k++;
}
// 处理剩余部分
while (i < m) {
c[k] = a[i];
i++;
k++;
}
while (j < n) {
c[k] = b[j];
j++;
k++;
}
}
// 归并排序
void merge_sort(int *a, int n) {
if (n <= 1) {
return;
}
int mid = n / 2;
int *left = (int *)malloc(sizeof(int) * mid);
int *right = (int *)malloc(sizeof(int) * (n - mid));
// 将数组分成两部分
for (int i = 0; i < mid; i++) {
left[i] = a[i];
}
for (int i = 0; i < n - mid; i++) {
right[i] = a[i + mid];
}
merge_sort(left, mid); // 对左侧进行归并排序
merge_sort(right, n - mid); // 对右侧进行归并排序
merge(left, right, a, mid, n - mid); // 合并两个已排序的数组
free(left);
free(right);
}
int main() {
int a[] = {5, 2, 4, 7, 1, 3, 2, 6};
int n = sizeof(a) / sizeof(int);
merge_sort(a, n);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
```
这段代码实现了一个归并排序的函数 `merge_sort`,它将数组 `a` 从小到大排序。归并排序的基本思