【问题描述】使用递归合并排序算法对若干整数进行排序
【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔
【输出形式】输出递归函数调用的次数和最终从小到大排序好的结果。
【样例输入】
7
48 38 65 97 76 13 27
【样例输出】
13
13 27 38 48 65 76 97
【样例说明】
输入:7个整数,以空格分隔。
输出:第一行输出递归函数调用的次数,第二行输出最终从小到大排序好的结果,整数间以空格分隔。
【评分标准】根据输入得到准确的输出
#include<stdio.h>
#include<iostream>
using namespace std;
const int maxn = 10005;
const int INF = 0x3f3f3f3f;
int cnt = 0;
void Swap(int *a,int *b) {
int t = *a;
*a = *b;
*b = t;
return;
}
void merge(int x[],int tmp[], int l, int r, int mid)
{
int i = l, j = mid + 1, q = l;
while(i <= mid && j <= r)
{
if(x[i] <= x[j]) {
tmp[q++]=x[i++];
}
else
tmp[q++]=x[j++];
}
while(i <= mid)
tmp[q++]=x[i++];
while(j <= r)
tmp[q++]=x[j++];
for(i = l; i <= r; i++)
x[i] = tmp[i];
}
void Merge_Sort(int a[], int tmp[], int l,int r) {
if(l < r) {
int mid = (l+r)/2;
cnt += 2;
Merge_Sort(a,tmp, l,mid);
Merge_Sort(a,tmp, mid+1,r);
merge(a,tmp,l,r,mid);
}
return;
}
int main() {
cnt = 1;
int n = 0;
int a[1005] = {0};
int t[1005] = {0};
cin >> n;
for(int i = 0; i < n; ++i) {
cin >> a[i];
}
Merge_Sort(a, t, 0, n-1);
printf("%d\n", cnt);
for(int i = 0; i < n; ++i) {
printf("%d ", a[i]);
}
printf("\n");
}