# Rotating an array

### Rotating an array:

In this post we will discuss two solutions for rotating an array by a given number of times. One is a simple solution and another uses the reversal operation (discusses in the previous post).

Method#1: Simple and intuitive

In this method, we will copy the last element into a variable, and shift all the elements right by one step, and copy the stored element into the empty spot created at the beginning of the array. We repeat this for the given number of times.

Method#2: Using reversal algorithm

I have taken this algorithm from here. It is a three step procedure. Let array[0:n-1] be the array, and ‘s’ be the number of times to rotate the array.
step 1: Reverse the sub-array array[0:s-1]
step 2: Reverse the sub-array array[s:n-1]
step 3: Reverse the whole array i.e array[0:n-1]

For example let the array be [7 1 2 3 8], and it is to be rotated 3 times
here is how it works
step 1: [2 1 7 3 8]
step 2: [2 1 7 8 3]
step 3: [3 8 7 1 2]

C++ implementation of the above two methods is given below.

`#include <iostream>#include <string>using namespace std;//right rotates array of size n by s positions//assumes that n > 1 (atleast 2 elements) and s < nvoid rotateSimple( int* array, int n, int s){ int i; int j; for( i = 0 ; i < s ; i++ ) {  //store the last element  int last = array[n-1];    //shift all elements right by one  for( j = n-2 ; j >= 0 ; j-- )  {   array[j+1] = array[j];  }  //copy stored element to the beginning  array[0] = last; }}//helper method for reversalvoid swap( int &a, int &b){ int temp = a; a = b; b = temp;}//function to reverse the sub-array array[low to highvoid reverseArray(int *array, int low, int high){ while( low < high ) //until both ends meet {  swap( array[low], array[high] ); //swap the elements  low++; //increment left  high--;//decrement right }}//rotate the array using reversal operationvoid rotateByReverse(int* array,int n, int s){  reverseArray(array,0,s-1); reverseArray(array,s,n-1); reverseArray(array,0,n-1);}//utlity to print the arrayvoid printArray(int * array,int n){ for( int i = 0; i < n; i++ ) {  cout<<array[i]<<" "; } cout<<endl;}int main(){ int n; //array size int s; //rotation count //read array size, and rotation count cin>>n>>s; //dynamically allocate array based on input size int *array = new int[n]; int i; for( i = 0 ; i < n; i++ ) {  cin>>array[i]; } //call rotate function rotateByReverse( array, n, s); printArray( array, n); //release the memory delete[] array; return 0;}`