Description
用函数实现归并排序(非递归算法),并输出每趟排序的结果
输入格式
第一行:键盘输入待排序关键的个数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>
void MergeSort(int a[],int n)
{
int d=1;
while(d<=n)
{
for(int beginn=1; beginn<=n; beginn=beginn+2*d)
{
int b[n],m=1,i,j;
for( i=beginn,j=beginn+d; i<beginn+d&&j<beginn+2*d&&i<=n&&j<=n;)
{
if(a[i]<a[j])
b[m++]=a[i++];
else
b[m++]=a[j++];
}
while(i<beginn+d&&i<=n) b[m++]=a[i++];
while(j<beginn+2*d&&j<=n) b[m++]=a[j++];
for(i=beginn,j=1; i<beginn+2*d&&j<=2*d&&i<=n&&j<=n;)
a[i++]=b[j++];
}
for(int i=1; i<=n; i++)
printf("%d ",a[i]);
printf("\n");
d=d*2;
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n+1];
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
MergeSort(a,n);
return 0;
}
自我测试没问题,oj过不了
参考GPT和自己的思路:
可能出现oj过不了的原因,主要有以下几个方面:
输入格式不正确。根据题目提示,输入格式应该是先输入待排序的个数n,然后再输入n个待排序关键字。请仔细检查一下输入格式是不是符合要求。
输出格式不正确。根据题目提示,每行输出每趟排序的结果,数据之间用一个空格分隔。请仔细检查一下输出格式是不是符合要求。
算法实现有误。请仔细检查一下自己的算法实现是否正确。是否可以处理所有可能的输入情况。注意边界条件是否正确。
中间结果处理有误。根据题目要求,需要输出每一趟排序的结果。请仔细检查一下自己的中间结果处理是否正确。
建议您检查完以上几个方面之后,结合具体的错误信息和提示,找出问题所在,并进行相应的修改和调试。