C编程:顺序合并两个排序的数组(但在合并后不进行排序)

时间:2014-06-13 06:28:10

标签: c arrays sorting

现在我发现自己处在一个特别令人困惑的地方。

我有一个元素数组 1 5 9(例如a1 a2 a3) 第二组元素 2 4 8(例如b1 b2 b3)

我希望输出为 1,2 5,4 9,8(即a1,b1 a2,b2 a3,b3) ...是否可能,我尝试排序的所有循环整个事情就像1,2,4,5,8,9 ???

提前致谢。

代码块:

void merge(int a[], int m, int b[], int n, int sorted[]) {
  int i, j, k;

  j = k = 0;

  for (i = 0; i < m + n;) {
     if (j < m && k < n) {
        if (a[j] < b[k]) {
          sorted[i] = a[j];
          j++;
        }
        else {
          sorted[i] = b[k];
          k++;
        }
        i++;
     }
     else if (j == m) {
        for (; i < m + n;) {
          sorted[i] = b[k];
          k++;
          i++;
        }
     }
     else {
        for (; i < m + n;) {
          sorted[i] = a[j];
          j++;
          i++;
        }
     }
  }
}

4 个答案:

答案 0 :(得分:7)

你的情况:

if (a[j] < b[k]) {

强制排序,但你说你不想要排序,所以不要这样做。

我更喜欢更简单的循环结构:

while (j < m && k < n)
{
    sorted[i++] = a[j++];
    sorted[i++] = b[k++];
}
while (j < m)
    sorted[i++] = a[j++];
while (k < n)
    sorted[i++] = b[k++];

这更像是惯用的C.

答案 1 :(得分:4)

试试这个......

    int i,j,k,m;
  int arr[] = {1,5,9};
  int arr1[] = {2,4,8};
  int l1 = sizeof(arr)/sizeof(int);
  int l2 = sizeof(arr1)/sizeof(int);
  int arr3[l1+l2];
  int l3 = sizeof(arr3)/sizeof(int);
  j=0;
  k=0;
  if(l1>=l2){
      for(i=0;i<l1;){
        if(arr[i]<arr1[j]){
            arr3[k]=arr[i];
            i++;
            k++;
        }else{
            arr3[k]=arr1[j];
            k++;
            j++;
        }
        if(j==l2){
            arr3[k]=arr[i];
            i++;
            k++;
        }
      }
  }
  for(i=0;i<l3;i++){
      printf("%d    ",arr3[i]);
  }

<强>输出

1    2    4    5    8    9    

答案 2 :(得分:3)

如果您想要这样的输出1,2 5,4 9,8
然后更改if条件

if (j < m && k < n) {
      sorted[i++] = a[j];
      j++;
      sorted[i++] = b[k];
      k++;
 }

答案 3 :(得分:3)

  //int k = Math.Max(m, n);
  int k = m < n ? n : m;
    int j = 0;
    for (int i = 0; i < k; i++)
    {
         if(i < m && i < n)
         {
             sorted[j++] = a[i];
             sorted[j++] = b[i];
         }
         else 
         {
            while(i < m)
               {
                    sorted[j++] = a[i++];
               }

                   while(i < n)
              {
                 sorted[j++] = b[i++];
              }
         }
    }