Array Rotation in C++

Rotation of array in C++

On this page we will discuss about rotation of array in C++ . Array rotation is a process of rearranging the elements of an array by shifting its elements by a specified number of positions.This can be done in two ways: left rotation and right rotation.

 
Array-Rotation-in-Cpp Programming

Array Rotation In C++ Programming

Array rotation is a common operation in computer programming that involves shifting the elements of an array by a certain number of positions. This can be done in two ways: left rotation and right rotation.

  • In left rotation, the elements of the array are shifted to the left by a certain number of positions, and the elements that “fall off” the left end of the array are added to the right end of the array. For example, if we have an array [1, 2, 3, 4, 5] and we left rotate it by 2 positions, we would get the array [3, 4, 5, 1, 2].
  • In right rotation, the elements of the array are shifted to the right by a certain number of positions, and the elements that “fall off” the right end of the array are added to the left end of the array. For example, if we have an array [1, 2, 3, 4, 5] and we right rotate it by 2 positions, we would get the array [4, 5, 1, 2, 3].
Rotation of array In C++

Algorithm for ( Using a Temporary Array )

  1. Create a temporary array of size d.
  2. Copy the first d elements of the original array to the temporary array.
  3. Shift the remaining elements of the original array to the left by d positions.
  4. Add the elements from the temporary array to the right end of the original array.
  5. The array is now left rotated by d positions.

C++ code for temporary array method

Run
#include <iostream>
using namespace std;

void leftRotate (int arr[], int n, int d)
{
  int temp[d];
  for (int i = 0; i < d; i++)
    {
      temp[i] = arr[i];
    }
  for (int i = d; i < n; i++)
    {
      arr[i - d] = arr[i];
    }
  for (int i = n - d, j = 0; i < n; i++, j++)
    {
      arr[i] = temp[j];
    }
}

void rightRotate (int arr[], int n, int d)
{
  int temp[d];
  for (int i = n - d, j = 0; i < n; i++, j++)
    {
      temp[j] = arr[i];
    }
  for (int i = n - d - 1; i >= 0; i--)
    {
      arr[i + d] = arr[i];
    }
  for (int i = 0; i < d; i++)
    {
      arr[i] = temp[i];
    }
}

int main ()
{
  int arr[] = { 1, 2, 3, 4, 5 };
  int n = sizeof (arr) / sizeof (arr[0]);
  int d = 2;

  cout << "Original Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  leftRotate (arr, n, d);
  cout << "Left Rotated Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  rightRotate (arr, n, d);
  cout << "Right Rotated Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  return 0;
}

Output

Original Array: 1 2 3 4 5 
Left Rotated Array: 3 4 5 1 2 
Right Rotated Array: 1 2 3 4 5 

Algorithm for ( Rotating One by One )

  1. For each rotation, store the first element of the array in a temporary variable.
  2. Shift all the remaining elements of the array one position to the left.
  3. Move the temporary variable to the end of the array.
  4. Repeat the above steps d times to left rotate the array by d positions.

C++ code for rotating one by one

Run
#include <iostream>
using namespace std;

void leftRotate (int arr[], int n, int d)
{
  for (int i = 0; i < d; i++)
    {
      int temp = arr[0];
      for (int j = 0; j < n - 1; j++)
	{
	  arr[j] = arr[j + 1];
	}
      arr[n - 1] = temp;
    }
}

void rightRotate (int arr[], int n, int d)
{
  for (int i = 0; i < d; i++)
    {
      int temp = arr[n - 1];
      for (int j = n - 1; j >= 1; j--)
	{
	  arr[j] = arr[j - 1];
	}
      arr[0] = temp;
    }
}


int main ()
{
  int arr[] = { 1, 2, 3, 4, 5 };
  int n = sizeof (arr) / sizeof (arr[0]);
  int d = 2;

  cout << "Original Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  leftRotate (arr, n, d);
  cout << "Left Rotated Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  rightRotate (arr, n, d);
  cout << "Right Rotated Array: ";
  for (int i = 0; i < n; i++)
    {
      cout << arr[i] << " ";
    }
  cout << endl;

  return 0;
}

Output

Original Array: 1 2 3 4 5 
Left Rotated Array: 3 4 5 1 2 
Right Rotated Array: 1 2 3 4 5