gpt4 book ai didi

c - 两个已排序数组的融合

转载 作者:行者123 更新时间:2023-11-30 19:57:08 25 4
gpt4 key购买 nike

void fus(int *A, int *B, int *C, int n, int m) {
int j, k, d = n + m;
for (i = 0, j = 0, k = 0; j < m && i < n && k < d; i++, j++, k++) {
if ((*(A+i)) < (*(B+j))) {
(*(C+k)) = (*(A+i));
} else
(*(C+k)) = (*(B+j));
}
}

我是否可以将所有这些条件放入 for 中?

我不知道为什么它不起作用,我想获得一个排序数组

最佳答案

Rabbid76 发现了这个问题。

(例如)A[i]*(A + i) 更容易/更清晰

此外,如果 AB 的长度不同[它们可以在合并排序合并操作中],我们需要两个额外的循环来复制剩余的AB

中较长的一个

此外,最好使用比 ij 等更具描述性的名称。

这是一个更正的版本[请原谅无偿的风格清理]:

void
fus(int *A, int *B, int *C, int nA, int nB)
{
int iC = 0;
int iA = 0;
int iB = 0;

for (; (iA < nA) && (iB < nB); ++iC) {
if (A[iA] <= B[iB])
C[iC] = A[iA++];
else
C[iC] = B[iB++];
}

for (; iA < nA; ++iA, ++iC)
C[iC] = A[iA];

for (; iB < nB; ++iB, ++iC)
C[iC] = B[iB];
}

关于c - 两个已排序数组的融合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52797274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com