给定一个整数序列,请按非递减序输出采用二路归并排序(递归法)的各趟排序后的结果(每完成一次归并操作就输出归并后的结果)。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。 输出格式: 对于每组测试,输出若干行,每行是一趟排序后的结果,每行的每两个数据之间留一个空格。C语言代码
时间: 2024-03-24 07:36:35 浏览: 8
以下是C语言代码实现:
```c
#include <stdio.h>
void merge(int arr[], int left, int mid, int right) {
int temp[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (i = left; i <= right; i++) {
arr[i] = temp[i - left];
}
}
void merge_sort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
merge_sort(arr, left, mid);
merge_sort(arr, mid + 1, right);
merge(arr, left, mid, right);
for (int i = left; i <= right; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
merge_sort(arr, 0, n - 1);
}
return 0;
}
```
其中,`merge`函数实现归并操作,`merge_sort`函数实现二路归并排序,每完成一次归并操作就输出归并后的结果。主函数中,每组测试数据读入后调用`merge_sort`函数进行排序。