#include <stdlib.h>//malloc,free
#include <stdio.h>//printf
void merge(int* a, int m, int*b, int n, int*rt)
{
int* pa = a;
int* pb = b+n-1;
while(pa<a+m && pb>b-1)
{
if(*pa < *pb)
{
*rt = *pa;
pa++;
rt++;
}
else
{
*rt = *pb;
pb--;
rt++;
}
}
while(pa<a+m)
{
*rt = *pa;
pa++;
rt++;
}
while(pb>b-1)
{
*rt = *pb;
pb--;
rt++;
}
}
void dump(int* arr, int n, char* name)
{
int i;
printf("%s:\n",name);
for(i=0; i<n; i++)
{
printf("[%d]=%d,",i,*(arr+i));
}
printf("\n");
}
int main(int argc, char** argv)
{
int a[]={0,2,5,6,7,10,12,15,20};
//int a[]={10,12,15,20};
int m=sizeof(a)/sizeof(int);
//int b[]={10,8,5,4,4,2,1};
int b[]={30,29,21};
int n=sizeof(b)/sizeof(int);
int* c=malloc(sizeof(int)*(m+n));
if(NULL==c) return -1;
dump(a,m,"a");
dump(b,n,"b");
merge(a,m,b,n,c);
dump(c,m+n,"c");
free(c);
return 0;
}
和你的要求有一点不同的是,下标是从0开始的。
程序在GCC 4.1.2下编译运行通过。
参考资料:http://www.herofit.cn
本回答被提问者采纳