问题遇到的现象和发生背景
用指针方法实现将两个有序的数组合并成一个有序数组
用指针方法编写程序,分别输入两个按从小到大排序的数组 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里面。
大概就是这样。
我想要达到的结果
结果就是,三种测试输入,都有数据错误,不知道怎么回事,可能是我现在没看出来,但希望有人来讲解一下。