通过指针将俩个有序数组合并成一个有序数组
#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+2anum;q<b+bnum,q<c+anum+bnum;q++,r++)
{
*r++=*q++;
}
}
for(r=c;r<c+anum+bnum;r++)
{
printf("%d ",*r);
}
return 0;
}
在实际运行中最后出来的数组并不是有序的
这个写法,两个数组 a[] b[] 的元素应该是升序排列。另 else if(q<b+bnum) 这句里的 else 多余了,应该去除改为: if(q<b+bnum) 即可。