第一行:键盘输入待排序关键的个数n 第二行:输入n个待排序关键字,用空格分隔数据
输入样例
10 5 4 8 0 9 3 2 6 7 1
输出样例
4 5 0 8 3 9 2 6 1 7 0 4 5 8 2 3 6 9 1 7 0 2 3 4 5 6 8 9 1 7 0 1 2 3 4 5 6 7 8 9
#include <stdio.h>
#include <stdlib.h>
#include<algorithm>
using namespace std;
int up(int n,int d)
{
if(((n+1)/d)!=0)
return (n+1)/d+1;
else
return (n+1)/d;
}
void mergeSort(int a[],int n)
{
for(int d=2;;d*=2)
{
int k=0;
if(d>n)
d=n,k=1;
int group=up(n,d); //组次
int temp[d];
for(int i=0;i<group;i++)
{
if(i!=group-1)
{
for(int j=0;j<d;j++)
temp[j]=a[i*d+j];
sort(temp,temp+d);
for(int j=0;j<d;j++)
a[i*d+j]=temp[j];
}
else
{
int len=n-(group-1)*d;
for(int j=0;j<len;j++)
temp[j]=a[i*d+j];
sort(temp,temp+len);
for(int j=0;j<len;j++)
a[i*d+j]=temp[j];
}
}
for(int i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
if(k==1)
break;
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
mergeSort(a,n);
}
运行结果一致。
提交到学校oj上显示:运行时错误。麻烦大家告诉一下错误,谢谢啦!
不知道你这个问题是否已经解决, 如果还没有解决的话: