问题:用指针方法实现将两个有序的数组合并成一个有序数组
#include<stdio.h>
#define N 20
int main()
{
int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
scanf("%d",&anum);
for(p=a;p<a+anum;p++)
{
scanf("%d",p);
}
scanf("%d",&bnum);
for(q=b;q<b+bnum;q++)
{
scanf("%d",q);
}
for(p=a,q=b,r=c;p<a+anum,q<b+bnum,r<c+anum+bnum;r++)
{
if(*p>*q)
{
*r=*q;
q++;
}
else
{
*r=*p;
p++;
}
}
if(p<a+anum&&q>=b+bnum)
{
for(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
{
*r=*p;
}
}
if(p>=a+anum&&q<b+bnum)
{
for(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
{
*r=*q;
}
}
for(r=c;r<c+anum+bnum;r++)
{
printf("%d ",*r);
}
return 0;
}
输入:2
0 1
3
2 3 4
输出:
0 1 后面3个数都是很大的数。
修改如下,供参考:
#include<stdio.h>
#define N 20
int main()
{
int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
scanf("%d",&anum);
for(p=a;p<a+anum;p++)
{
scanf("%d",p);
}
scanf("%d",&bnum);
for(q=b;q<b+bnum;q++)
{
scanf("%d",q);
}
for(p=a,q=b,r=c;p<a+anum && q<b+bnum ;)//,r<c+anum+bnum;r++)
{
if(*p>*q)
{
*r++=*q++;
//q++;
}
else
{
*r++=*p++;
//p++;
}
}
if(p<a+anum) //&&q>=b+bnum)
{
for(;p<a+anum;)//(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
{
*r++=*p++;
}
}
else if(q<b+bnum) //p>=a+anum&&
{
for(;q<b+bnum;)//(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
{
*r++=*q++;
}
}
for(r=c;r<c+anum+bnum;r++)
{
printf("%d ",*r);
}
return 0;
}