SCAU 8645 归并排序(非递归算法)

第一行:键盘输入待排序关键的个数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上显示:运行时错误。麻烦大家告诉一下错误,谢谢啦!

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^