将数组项移位4位

时间:2014-10-30 05:25:13

标签: c++ arrays

这些函数只将我的a [] 1位置内的元素向右移动,但我想将它移动到4位置。我是新手。这个家伙的任何暗示或帮助?

void shiftright (int a[], int size);

int main (void)
{
    int a []= {1, 2, 3, 4, 5, 6, 7, 8};
    shiftright( a, 8);
    for ( int i=0; i<8; i++) 
    {
        cout << a[i] << ' ';
    }
    return(0);
}

void shiftright (int a[], int size)
{
    int temp;
    int temp1;
    for (int i=0; i<(size -1); i++)
    {
        temp = a[size-1];
        a[size-1] = a[i];
        a[i] = temp;
    }
}

2 个答案:

答案 0 :(得分:1)

如果表现不是关键值,您可以拨打&#39; shiftright&#39;三次(我假设你不能使用std :: rotate)。修改&#39; shiftright&#39;容纳4的移位功能将使其更少可重复使用(在大多数情况下)。例如,如果下次只需旋转两次,则可以使用相同的功能。

答案 1 :(得分:0)

以下是在案例array中按顺序k轮播k is 4的替代方法。

void reverse_array(int* arr, int left, int right) {
    int* p1 = arr + left;
    int* p2 = arr + right;
    while (p1 < p2) {
        int temp = *p1;
        *p1 = *p2;
        *p2 = temp;
        p1++;
        p2--;
    }
}

void shiftright(int* arr, int k, int size) {
    int n = size;
    reverse_array(arr, 0, n-1); //! First reverse the complete array
    reverse_array(arr, 0, k-1); //! Now reverse first k elements
    reverse_array(arr, k, n-1); //! Now reverse element from k to last
}

如果你正在编写这个函数只是为了学习目的而不是正常,否则建议使用标准函数,如std::rotate,而不是编写自己的版本。