青玉浮案 2022-11-28 22:40 采纳率: 33.3%
浏览 233
已结题

用指针方法实现将两个有序的数组合并成一个有序数组

问题遇到的现象和发生背景

用指针方法实现将两个有序的数组合并成一个有序数组
用指针方法编写程序,分别输入两个按从小到大排序的数组 a 和 b,将这两个有序数组合并,使合并后的数组 c 仍是从小到大有序的。

用代码块功能插入代码,请勿粘贴截图
#include<stdio.h>
#define N 20
int main()
{

    int a[N]={ 0 }, b[N]={ 0 };
    int an,bn,c[N+N];
    int *i, *j,*k;
    scanf("%d",&an);   //输入数组a元素个数
    for(i=a;i<a+an;i++)
    {
        scanf("%d",i);
    }
    scanf("%d",&bn);   //输入数组b元素个数
    for(j=b;j<b+bn;j++)
    {
        scanf("%d",j);
    }
    for(i=a,j=b,k=c;i<a+an,j<b+bn,k<c+an+bn;k++)
    {
        if(*i>*j)
        {
            *k=*j;
            j++;
        }
        else
        {
            *k=*i;
            i++;
        }
    }
    if(i<a+an && j>=b+bn)
    {
        for(i=a+bn,k=c+2*bn;i<a+an,k<c+an+bn;i++,k++)
        {
            *k=*i;
        }
    }
    else if(j<b+bn && i>=a+an)
    {
        for(j=b+an,k=c+2*an;j<b+bn,k<c+an+bn;j++,k++)
        {
            *k=*j;
        }
    }
    for(k=c;k<c+an+bn;k++)
    {
        printf("%d ",*k);
    }
    printf("\n");
    return 0;
}


运行结果及报错内容

测试输入
8
1 5 14 26 48 50 55 60
5
4 26 29 37 78
预期结果1 4 5 14 26 26 29 37 48 50 55 60 78
实际输出1 4 5 14 26 26 29 37 48 50 55 60 0

我的解答思路和尝试过的方法

a和b都有数据时比较,谁小谁放在c里面,然后用判断语句来看谁还有剩余的数据,将他继续放到c里面。
大概就是这样。

我想要达到的结果

结果就是,三种测试输入,都有数据错误,不知道怎么回事,可能是我现在没看出来,但希望有人来讲解一下。

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-11-29 00:22
    关注

    改动处见注释,供参考:

    #include<stdio.h>
    #define N 20
    int main()
    {
        int a[N]={ 0 }, b[N]={ 0 };
        int an,bn,c[N+N];
        int *i, *j,*k;
        scanf("%d",&an);   //输入数组a元素个数
        for(i=a;i<a+an;i++)
        {
            scanf("%d",i);
        }
        scanf("%d",&bn);   //输入数组b元素个数
        for(j=b;j<b+bn;j++)
        {
            scanf("%d",j);
        }
        for(i=a,j=b,k=c;i<a+an && j<b+bn;k++)//(i=a,j=b,k=c;i<a+an,j<b+bn,k<c+an+bn;k++)
        {
            if(*i>*j)
            {
                *k=*j;
                j++;
            }
            else
            {
                *k=*i;
                i++;
            }
        }
        if(i<a+an)//&& j>=b+bn)
        {
            for(;i<a+an;i++,k++)//(i=a+bn,k=c+2*bn;i<a+an,k<c+an+bn;i++,k++)
            {
                *k=*i;
            }
        }
        else if(j<b+bn) //&& i>=a+an)
        {
            for(;j<b+bn;j++,k++)//(j=b+an,k=c+2*an;j<b+bn,k<c+an+bn;j++,k++)
            {
                *k=*j;
            }
        }
        for(k=c;k<c+an+bn;k++)
        {
            printf("%d ",*k);
        }
        printf("\n");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月13日
  • 已采纳回答 12月5日
  • 创建了问题 11月28日

悬赏问题

  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄