Reversal algorithm for array rotation

01 Jul, 2022
Write a function rotate(arr[], d, n) that rotates arr[] of size n by d elements. Example : 
Input :  arr[] = [1, 2, 3, 4, 5, 6, 7]
         d = 2
Output : arr[] = [3, 4, 5, 6, 7, 1, 2] 
 Let the arr[ ] contain no. of elements in it-
For example, if the user gives an input in which the array should be rotated by 2 places then the resultant array is- 
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
 
The first 3 methods to rotate an array by d elements have been discussed in this post. Method 4 (The Reversal Algorithm) :Algorithm :  
rotate(arr[], d, n)
  reverse(arr[], 1, d) ;
  reverse(arr[], d + 1, n);
  reverse(arr[], 1, n);
Let AB are the two parts of the input array where A = arr[0..d-1] and B = arr[d..n-1]. The idea of the algorithm is :  
Reverse A to get ArB, where Ar is the reverse of A.
Reverse B to get ArBr, where Br is the reverse of B.
Reverse all to get (ArBr) r = BA.
Example : Let the array be arr[] = [1, 2, 3, 4, 5, 6, 7], d =2 and n = 7 A = [1, 2] and B = [3, 4, 5, 6, 7]  
Reverse A, we get ArB = [2, 1, 3, 4, 5, 6, 7]
Reverse B, we get ArBr = [2, 1, 7, 6, 5, 4, 3]
Reverse all, we get (ArBr)r = [3, 4, 5, 6, 7, 1, 2]
Below is the implementation of the above approach :  
C++
C
Java
Python3
C#
PHP
Javascript
// C++ program for reversal algorithm// of array rotation#include <bits/stdc++.h>using namespace std;  /*Function to reverse arr[] from index start to end*/void reverseArray(int arr[], int start, int end){    while (start < end) {        int temp = arr[start];        arr[start] = arr[end];        arr[end] = temp;        start++;        end--;    }}  /* Function to left rotate arr[] of size n by d */void leftRotate(int arr[], int d, int n){    if (d == 0)        return;    // in case the rotating factor is    // greater than array length    d = d % n;      reverseArray(arr, 0, d - 1);    reverseArray(arr, d, n - 1);    reverseArray(arr, 0, n - 1);}  // Function to print an arrayvoid printArray(int arr[], int size){    for (int i = 0; i < size; i++)        cout << arr[i] << " ";}  /* Driver program to test above functions */int main(){    int arr[] = { 1, 2, 3, 4, 5, 6, 7 };    int n = sizeof(arr) / sizeof(arr[0]);    int d = 2;      // Function calling    leftRotate(arr, d, n);    printArray(arr, n);      return 0;}
// C/C++ program for reversal algorithm of array rotation#include <stdio.h>  /*Utility function to print an array */void printArray(int arr[], int size);  /* Utility function to reverse arr[] from start to end */void reverseArray(int arr[], int start, int end);  /* Function to left rotate arr[] of size n by d */void leftRotate(int arr[], int d, int n){      if (d == 0)        return;    // in case the rotating factor is    // greater than array length    d = d % n;      reverseArray(arr, 0, d - 1);    reverseArray(arr, d, n - 1);    reverseArray(arr, 0, n - 1);}  /*UTILITY FUNCTIONS*//* function to print an array */void printArray(int arr[], int size){    int i;    for (i = 0; i < size; i++)        printf("%d ", arr[i]);}  /*Function to reverse arr[] from index start to end*/void reverseArray(int arr[], int start, int end){    int temp;    while (start < end) {        temp = arr[start];        arr[start] = arr[end];        arr[end] = temp;        start++;        end--;    }}  /* Driver program to test above functions */int main(){    int arr[] = { 1, 2, 3, 4, 5, 6, 7 };    int n = sizeof(arr) / sizeof(arr[0]);    int d = 2;      leftRotate(arr, d, n);    printArray(arr, n);    return 0;}
// Java program for reversal algorithm of array rotationimport java.io.*;  class LeftRotate {    /* Function to left rotate arr[] of size n by d */    static void leftRotate(int arr[], int d)    {          if (d == 0)            return;          int n = arr.length;        // in case the rotating factor is        // greater than array length        d = d % n;        reverseArray(arr, 0, d - 1);        reverseArray(arr, d, n - 1);        reverseArray(arr, 0, n - 1);    }      /*Function to reverse arr[] from index start to end*/    static void reverseArray(int arr[], int start, int end)    {        int temp;        while (start < end) {            temp = arr[start];            arr[start] = arr[end];            arr[end] = temp;            start++;            end--;        }    }      /*UTILITY FUNCTIONS*/    /* function to print an array */    static void printArray(int arr[])    {        for (int i = 0; i < arr.length; i++)            System.out.print(arr[i] + " ");    }      /* Driver program to test above functions */    public static void main(String[] args)    {        int arr[] = { 1, 2, 3, 4, 5, 6, 7 };        int n = arr.length;        int d = 2;          leftRotate(arr, d); // Rotate array by d        printArray(arr);    }}/*This code is contributed by Devesh Agrawal*/
# Python program for reversal algorithm of array rotation  # Function to reverse arr[] from index start to end    def reverseArray(arr, start, end):    while (start < end):        temp = arr[start]        arr[start] = arr[end]        arr[end] = temp        start += 1        end = end-1  # Function to left rotate arr[] of size n by d    def leftRotate(arr, d):      if d == 0:        return    n = len(arr)    # in case the rotating factor is    # greater than array length    d = d % n    reverseArray(arr, 0, d-1)    reverseArray(arr, d, n-1)    reverseArray(arr, 0, n-1)  # Function to print an array    def printArray(arr):    for i in range(0, len(arr)):        print (arr[i],end=' ')    # Driver function to test above functionsarr = [1, 2, 3, 4, 5, 6, 7]n = len(arr)d = 2  leftRotate(arr, d)  # Rotate array by 2printArray(arr)  # This code is contributed by Devesh Agrawal
// C# program for reversal algorithm// of array rotationusing System;  class GFG {    /* Function to left rotate arr[]    of size n by d */    static void leftRotate(int[] arr, int d)    {          if (d == 0)            return;        int n = arr.Length;          // in case the rotating factor is        // greater than array length        d = d % n;        reverseArray(arr, 0, d - 1);        reverseArray(arr, d, n - 1);        reverseArray(arr, 0, n - 1);    }      /* Function to reverse arr[] from    index start to end*/    static void reverseArray(int[] arr, int start,                             int end)    {        int temp;        while (start < end) {            temp = arr[start];            arr[start] = arr[end];            arr[end] = temp;            start++;            end--;        }    }      /*UTILITY FUNCTIONS*/    /* function to print an array */    static void printArray(int[] arr)    {        for (int i = 0; i < arr.Length; i++)            Console.Write(arr[i] + " ");    }      // Driver code    public static void Main()    {        int[] arr = { 1, 2, 3, 4, 5, 6, 7 };        int n = arr.Length;        int d = 2;          leftRotate(arr, d); // Rotate array by 2        printArray(arr);    }}  // This code is contributed by Sam007
<?php// PHP program for reversal // algorithm of array rotation  /* Function to left rotate   arr of size n by d */function leftRotate(&$arr, $d, $n){      if ($d == 0)        return;      // in case the rotating factor is      // greater than array length      $d = ($d % $n);    reverseArray($arr, 0, $d - 1);    reverseArray($arr, $d, $n - 1);    reverseArray($arr, 0, $n - 1);}  /*Function to reverse $arr  from index start to end*/function reverseArray(&$arr,                        $start, $end){    while ($start < $end)    {        $temp = $arr[$start];        $arr[$start] = $arr[$end];        $arr[$end] = $temp;        $start++;        $end--;    }}  // Function to // print an array function printArray($arr, $size){    for ($i = 0; $i < $size; $i++)    print $arr[$i]." ";}  // Driver code$arr = array(1, 2, 3,              4, 5, 6, 7);$n = sizeof($arr);$d = 2;  // Function callingleftRotate($arr, $d, $n);printArray($arr, $n);      // This code is contributed// by ChitraNayal?>
<script>      // JavaScript program for reversal algorithm      // of array rotation        /*Function to reverse arr[] from index start to end*/      function reverseArray(arr, start, end) {        while (start < end) {          var temp = arr[start];          arr[start] = arr[end];          arr[end] = temp;          start++;          end--;        }      }        /* Function to left rotate arr[] of size n by d */      function leftRotate(arr, d, n) {        if (d == 0) return;        // in case the rotating factor is        // greater than array length        d = d % n;          reverseArray(arr, 0, d - 1);        reverseArray(arr, d, n - 1);        reverseArray(arr, 0, n - 1);      }        // Function to print an array      function printArray(arr, size)       {        for (var i = 0; i < size; i++) document.write(arr[i] + " ");      }        /* Driver program to test above functions */        var arr = [1, 2, 3, 4, 5, 6, 7];      var n = arr.length;      var d = 2;        // Function calling      leftRotate(arr, d, n);      printArray(arr, n);              // This code is contributed by rdtank.    </script>
Output : 
3 4 5 6 7 1 2
Time Complexity : O(n)
Auxiliary Space: O(1) 
Reversal algorithm for array rotation | GeeksforGeeks - YouTubeGeeksforGeeks530K subscribersReversal algorithm for array rotation | GeeksforGeeksWatch laterShareCopy link64/101InfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 3:29•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=QOpU9-l5T7Y" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
Please write comments if you find anything incorrect, or if you want to share more information about the topic discussed above 
 
Parth Prajapati
ukasp
geeekno1
keerthanadec16
gp6
YashGovindani
rdtank
aamir786
amartyaghoshgfg
rishavnitro
anveshadixit0303
triangleofcoding
Codenation
rotation
Arrays
Codenation
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Arrays in Java
Write a program to reverse an array or string
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Largest Sum Contiguous Subarray
Arrays in C/C++
Multidimensional Arrays in Java
Stack Data Structure (Introduction and Program)
Linear Search
Subset Sum Problem | DP-25