合并两个数组而不使用数组进行排序

时间:2013-08-27 20:40:52

标签: c arrays pointers merge

我正在尝试使用指针方法合并到数组而不进行排序(添加一个然后另一个)但它只打印第一个数组然后打印垃圾值。我想要做的只是在一个大数组中组合2个数组。无需排序(至少目前为止)。

void getarray(int*,int);
int merge(int*,int*,int,int,int*);
main()
{
int a[10],b[10],c[20];
int i,j,n,m,size;
clrscr();
printf("Enter no. of elements in FIRST array: ");
scanf("%d",&n);
getarray(a,n);
printf("Enter no. of elements in SECOND array: ");
scanf("%d",&m);
getarray(b,m);
merge(a,b,n,m,c);
printf("\nMerged Array: \n");
for(i=0;i<n+m;i++)
{
    printf("\t%d\t",c[i]);
}
getch();
return 0;
}
void getarray(int *x, int y)
{
int i;
for(i=0;i<y;i++)
{
    scanf("%d",x+i);
}
}

int merge(int *a, int *b,int n,int m,int *c)
{
   int i,j;
for(i=0;i<n;i++)
{
    *(c+i) = *(a+i);
}
   for(j=i;j<i+m;j++)
   {
    *(c+j) = *(b+j);
   }
}

2 个答案:

答案 0 :(得分:2)

或者你可以使用(假设c足够大):

void merge(int *a, int *b,int n,int m,int *c) {
  memcpy(c,   a, sizeof(int)*n);
  memcpy(c+n, b, sizeof(int)*m);
}

您需要加入string.h

答案 1 :(得分:1)

int merge(int *a, int *b,int n,int m,int *c)
{
   int i,j;
for(i=0;i<n;i++)
{
    *(c+i) = *(a+i);
}
   for(j=0;j<m;j++)
   {
    *(c+n+j) = *(b+j);
   }
}