假设您的数组arr [N]越来越多。你必须将它分成另外两个(左和右):
L = {0, 2, 4, 6, 8, 10, ...}
R = {1, 3, 5, 7, 9, 11, ...}
以下算法执行此操作:
for ( i = 0; i < (N / 2) ; i++ )
{
L[i] = arr[2 * i + 0];
R[i] = arr[2 * i + 1];
}
问题是:如何进行反向算法?
因此输出数组将是:
arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...}
P.S。 我一直在思考它,但没有任何结果:(
答案 0 :(得分:10)
简单的解决方案就是彻底颠倒现有的操作:
for (i = 0; i < (N / 2); i++)
{
arr[2 * i + 0] = L[i];
arr[2 * i + 1] = R[i];
}
答案 1 :(得分:3)
您的原始问题未指定原始数组是否保证具有偶数个元素。
如果不是这样的话 你的解决方案也不是
for (i = 0; i < (N / 2); i++) {
arr[2 * i + 0] = L[i];
arr[2 * i + 1] = R[i]; }
保证可以正常工作。
最安全的赌注是
LR = {L, R};
for (i=0; i < N; i++) {
LR[i mod 2][i/2] = arr[i];
}
如上所述。