重新排列具有特定位置的数组元素

时间:2017-11-10 15:35:15

标签: c++ arrays sorting pointers

用户必须从任意数量的数字中创建数组,我需要重新排列数组,以便来自偶数位置的元素将移动到数组的开头,从UNEVEN位置移动到最后。例如,A=[1,2,3,4,5,6]会变成B=[2,4,6,1,3,5]。此外,我需要使用 POINTERS ....我的指针非常糟糕,所以非常感谢帮助。

这就是我自己。我不是在这里使用指针,因为我不知道如何...... :(

void switcharoo(int a, int b[]){
    int temp[a], j=0;
    for(int i=1;i<a;i+=2){
        temp[j] = b[i];
        j++;
    }
    for(int i=0;i<a;i+=2){
        temp[j] = b[i];
        j++;
    }
    b = temp;
}

1 个答案:

答案 0 :(得分:0)

Oups,你仍然需要提高你的C ++知识......

  • int temp[a]无效C ++,因为您在评论中被告知 - 可变长度数组是C功能
  • b作为指针传递(数组在传递给函数时衰减到指向其第一个元素的指针)。当您在函数结束时编写b=temp;时,您只会更改本地副本...它会立即超出范围:简而言之,当前代码只是一个无操作。
  • 数组索引从0开始

如果你想训练使用指针,你可以这样做:

void switcharoo(int a, int b[]) {
    int *even = new int[a];  // allocate an array of same size
    int *odd = even + a / 2;  // point at the mid array element
    for (int i = 0; i<a - 1; i += 2) {
        *odd++ = b[i];        // odd elements in high part
        *even++ = b[i + 1];   // even in low part
    }
    if (0 != a % 2) { // one odd element remains
        *odd++ = b[a - 1];
    }
    even = odd - a;     // make even point again to start of allocated array
    odd = even;         // store a copy
    for (int i = 0; i<a; i++) { // copy back in original array
        b[i] = *even++;
    }
    delete[] odd;       // and delete the allocated array
}