ac了吗 2021-06-15 20:20 采纳率: 0%
浏览 13

归并排序非递归版,oj过不了

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过不了

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-17 00:44
    关注

    参考GPT和自己的思路:

    可能出现oj过不了的原因,主要有以下几个方面:

    1. 输入格式不正确。根据题目提示,输入格式应该是先输入待排序的个数n,然后再输入n个待排序关键字。请仔细检查一下输入格式是不是符合要求。

    2. 输出格式不正确。根据题目提示,每行输出每趟排序的结果,数据之间用一个空格分隔。请仔细检查一下输出格式是不是符合要求。

    3. 算法实现有误。请仔细检查一下自己的算法实现是否正确。是否可以处理所有可能的输入情况。注意边界条件是否正确。

    4. 中间结果处理有误。根据题目要求,需要输出每一趟排序的结果。请仔细检查一下自己的中间结果处理是否正确。

    建议您检查完以上几个方面之后,结合具体的错误信息和提示,找出问题所在,并进行相应的修改和调试。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)