2014-10-30 77 views
1

这些函数仅将我的a [] 1位置内的元素向右移动,但我想将它移动4位置。我是一个新手。任何提示或帮助这个家伙?将阵列项目移位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; 
    } 
} 
+5

['std :: rotate'](http://en.cppreference.com/w/cpp/algorithm/rotate) – user657267 2014-10-30 05:28:14

+2

call'shiftright'3更多次 – 2014-10-30 05:29:22

+0

哈哈。谢啦。因为我不关心性能问题。这是最好的解决方案。 – afgphoenix 2014-10-30 05:32:03

回答

1

如果性能是不是一个关键值,你可以叫“shiftright”三次以上(我假设你不能使用std ::旋转)。修改'shiftright'函数以适应4的偏移将使其不易重用(在大多数情况下)。例如,如果下次只需旋转两次,则可以使用相同的功能。

0

这里是一个替代方法,通过您的案例k is 4命令k旋转array

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,而不是写你自己的版本。