【问题标题】:Merge two arrays without sorting using array合并两个数组而不使用数组进行排序
【发布时间】:2013-08-30 18:27:09
【问题描述】:

我正在尝试合并到数组而不使用指针方法进行排序(然后添加另一个),但它只是打印第一个数组,然后打印垃圾值。我想要做的只是将 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);
   }
}

【问题讨论】:

  • 嗨。要求人们发现代码中的错误并不是特别有效。您应该使用调试器(或添加打印语句)来隔离问题,方法是跟踪程序的进度,并将其与您期望发生的情况进行比较。一旦两者发生分歧,那么您就发现了您的问题。 (然后如果有必要,你应该构造一个minimal test-case。)
  • @OliCharlesworth -- 现在我不想想要发布我刚刚找到的答案,因为 Devlin 会通过自己找到答案来了解更多。
  • 老兄,我已经尝试了所有这些东西。我知道演习。仍然没有得到图片。所以,如果你想帮忙,请继续。
  • 您从 n 开始对 b 的索引(而不是 0)。这可不好。
  • 感谢@Jim。真的很有帮助。

标签: c arrays pointers merge


【解决方案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);
   }
}

【讨论】:

  • 您在第二个 for 循环中混淆了索引。
  • 谢谢你。我仍然在学习。所以请原谅我的菜鸟错误。
  • @Devlin 别担心。一些 SO 人可能是螃蟹。我们都有自己错过的错误,而其他人可以清楚地看到。无时无刻不在发生。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2016-07-26
    • 1970-01-01
    相关资源
    最近更新 更多