现在我发现自己处在一个特别令人困惑的地方.
我有一个元素数组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)
你的病情:
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.