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

Ric*_*het 2 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++;
        }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*ler 7

你的病情:

if (a[j] < b[k]) {
Run Code Online (Sandbox Code Playgroud)

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

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

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++];
Run Code Online (Sandbox Code Playgroud)

这更像是惯用的C.