2014-10-30 3 views
1

эти функции только перемещают элементы внутри моей [] 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

+2

call 'shiftright' 3 раза –

+0

ха-ха. Спасибо чувак. так как я не забочусь о проблеме производительности. это лучшее решение. – afgphoenix

ответ

1

Если производительность не является ключевым значением, можно назвать «shiftright» еще три раза (я предполагаю, вы не можете использовать зЬй :: Rotate). Пересмотр функции «shiftright» для размещения сдвига 4 сделает ее менее многоразовой (в большинстве случаев). Например, если в следующий раз вам нужно будет вращаться только дважды, вы сможете использовать ту же функцию.

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 вместо написания собственной версии.