2014-10-30 110 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,而不是寫你自己的版本。