Given an array, cyclically rotate the array clockwise by one.
Examples:
Input: arr[] = {1, 2, 3, 4, 5}
Output: arr[] = {5, 1, 2, 3, 4}
Following are steps.
1) Store last element in a variable say x.
2) Shift all elements one position ahead.
3) Replace first element of array with x.
C++
# include <iostream>
using namespace std;
void rotate( int arr[], int n)
{
int x = arr[n - 1], i;
for (i = n - 1; i > 0; i--){
arr[i] = arr[i - 1];
}
arr[0] = x;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof (arr) /
sizeof (arr[0]);
cout << "Given array is \n" ;
for (i = 0; i < n; i++)
cout << arr[i] << ' ' ;
rotate(arr, n);
cout << "\nRotated array is\n" ;
for (i = 0; i < n; i++)
cout << arr[i] << ' ' ;
return 0;
}
|
C
#include <stdio.h>
void rotate( int arr[], int n)
{
int x = arr[n-1], i;
for (i = n-1; i > 0; i--)
arr[i] = arr[i-1];
arr[0] = x;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof (arr)/ sizeof (arr[0]);
printf ( "Given array is\n" );
for (i = 0; i < n; i++)
printf ( "%d " , arr[i]);
rotate(arr, n);
printf ( "\nRotated array is\n" );
for (i = 0; i < n; i++)
printf ( "%d " , arr[i]);
return 0;
}
|
Java
import java.util.Arrays;
public class Test
{
static int arr[] = new int []{ 1 , 2 , 3 , 4 , 5 };
static void rotate()
{
int x = arr[arr.length- 1 ], i;
for (i = arr.length- 1 ; i > 0 ; i--)
arr[i] = arr[i- 1 ];
arr[ 0 ] = x;
}
public static void main(String[] args)
{
System.out.println( "Given Array is" );
System.out.println(Arrays.toString(arr));
rotate();
System.out.println( "Rotated Array is" );
System.out.println(Arrays.toString(arr));
}
}
|
Python3
def rotate(arr, n):
x = arr[n - 1 ]
for i in range (n - 1 , 0 , - 1 ):
arr[i] = arr[i - 1 ];
arr[ 0 ] = x;
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
print ( "Given array is" )
for i in range ( 0 , n):
print (arr[i], end = ' ' )
rotate(arr, n)
print ( "\nRotated array is" )
for i in range ( 0 , n):
print (arr[i], end = ' ' )
|
C#
using System;
public class Test
{
static int []arr = new int []{1, 2, 3, 4, 5};
static void rotate()
{
int x = arr[arr.Length - 1], i;
for (i = arr.Length - 1; i > 0; i--)
arr[i] = arr[i-1];
arr[0] = x;
}
public static void Main()
{
Console.WriteLine( "Given Array is" );
string Original_array = string .Join( " " , arr);
Console.WriteLine(Original_array);
rotate();
Console.WriteLine( "Rotated Array is" );
string Rotated_array = string .Join( " " , arr);
Console.WriteLine(Rotated_array);
}
}
|
PHP
<?php
function rotate(& $arr , $n )
{
$x = $arr [ $n - 1];
for ( $i = $n - 1;
$i > 0; $i --)
$arr [ $i ] = $arr [ $i - 1];
$arr [0] = $x ;
}
$arr = array (1, 2, 3, 4, 5);
$n = sizeof( $arr );
echo "Given array is \n" ;
for ( $i = 0; $i < $n ; $i ++)
echo $arr [ $i ] . " " ;
rotate( $arr , $n );
echo "\nRotated array is\n" ;
for ( $i = 0; $i < $n ; $i ++)
echo $arr [ $i ] . " " ;
?>
|
Javascript
<script>
function rotate(arr, n)
{
var x = arr[n-1], i;
for (i = n-1; i > 0; i--)
arr[i] = arr[i-1];
arr[0] = x;
}
var arr = [1, 2, 3, 4, 5];
var n = arr.length;
document.write( "Given array is <br>" );
for ( var i = 0; i< n; i++)
document.write(arr[i] + " " );
rotate(arr, n);
document.write( "<br>Rotated array is <br>" );
for ( var i = 0; i < n; i++)
document.write(arr[i] + " " );
</script>
|
OutputGiven array is
1 2 3 4 5
Rotated array is
5 1 2 3 4
Time Complexity: O(n), as we need to iterate through all the elements. Where n is the number of elements in the array.
Auxiliary Space: O(1), as we are using constant space.
Another approach:
We can use two pointers, say i and j which point to first and last element of array respectively. As we know in cyclic rotation we will bring last element to first and shift rest in forward direction, so start swapping arr[i] and arr[j] and keep j fixed and i moving towards j. Repeat till i is not equal to j.
C
#include <stdio.h>
void swap( int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void rotate( int arr[], int n)
{
int i = 0, j = n - 1;
while (i != j)
{
swap(&arr[i], &arr[j]);
i++;
}
}
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof (arr)/ sizeof (arr[0]);
printf ( "Given array is\n" );
for (i = 0; i < n; i++)
printf ( "%d " , arr[i]);
rotate(arr, n);
printf ( "\nRotated array is\n" );
for (i = 0; i < n; i++)
printf ( "%d " , arr[i]);
return 0;
}
|
C++
#include <iostream>
using namespace std;
void rotate( int arr[], int n)
{
int i = 0, j = n-1;
while (i != j){
swap(arr[i], arr[j]);
i++;
}
}
int main()
{
int arr[] = {1, 2, 3, 4, 5}, i;
int n = sizeof (arr) /
sizeof (arr[0]);
cout << "Given array is \n" ;
for (i = 0; i < n; i++)
cout << arr[i] << " " ;
rotate(arr, n);
cout << "\nRotated array is\n" ;
for (i = 0; i < n; i++)
cout << arr[i] << " " ;
return 0;
}
|
Java
import java.util.Arrays;
public class Test
{
static int arr[] = new int []{ 1 , 2 , 3 , 4 , 5 };
static void rotate()
{
int i = 0 , j = arr.length - 1 ;
while (i != j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
}
public static void main(String[] args)
{
System.out.println( "Given Array is" );
System.out.println(Arrays.toString(arr));
rotate();
System.out.println( "Rotated Array is" );
System.out.println(Arrays.toString(arr));
}
}
|
Python3
def rotate(arr, n):
i = 0
j = n - 1
while i ! = j:
arr[i], arr[j] = arr[j], arr[i]
i = i + 1
pass
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
print ( "Given array is" )
for i in range ( 0 , n):
print (arr[i], end = ' ' )
rotate(arr, n)
print ( "\nRotated array is" )
for i in range ( 0 , n):
print (arr[i], end = ' ' )
|
C#
using System;
class GFG{
static int []arr = new int []{ 1, 2, 3, 4, 5 };
static void rotate()
{
int n = arr[arr.Length - 1];
int i = 0, j = n - 1;
while (i != j)
{
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
i++;
}
}
public static void Main()
{
Console.WriteLine( "Given Array is" );
string Original_array = string .Join( " " , arr);
Console.WriteLine(Original_array);
rotate();
Console.WriteLine( "Rotated Array is" );
string Rotated_array = string .Join( " " , arr);
Console.WriteLine(Rotated_array);
}
}
|
Javascript
<script>
function rotate(arr, n){
var i = 0
var j = n-1
while (i != j){
let temp;
temp = arr[i];
arr[i] = arr[j];
arr[j]= temp;
i =i+1
}
}
var arr = [1, 2, 3, 4, 5];
var n = arr.length;
document.write( "Given array is <br>" );
for ( var i = 0; i< n; i++)
document.write(arr[i] + " " );
rotate(arr, n);
document.write( "<br>Rotated array is <br>" );
for ( var i = 0; i < n; i++)
document.write(arr[i] + " " );
</script>
|
OutputGiven array is
1 2 3 4 5
Rotated array is
5 1 2 3 4
Time Complexity: O(n), as we need to iterate through all the elements. Where n is the number of elements in the array.
Auxiliary Space: O(1), as we are using constant space.
Another approach(Using Slicing ):
We can also solve this problem using slicing in python.
Implementation for the above approach:-
C++
#include <iostream>
using namespace std;
void rotateArray( int array[], int size) {
int last = array[size-1];
for ( int i = size-1; i > 0; i--) {
array[i] = array[i-1];
}
array[0] = last;
}
int main() {
int array[] = {1, 2, 3, 4, 5};
int size = sizeof (array) / sizeof (array[0]);
rotateArray(array, size);
for ( int i = 0; i < size; i++) {
cout << array[i] << " " ;
}
return 0;
}
|
Python3
def rotateArray(array):
array[:] = array[ - 1 :] + array[: - 1 ]
array = [ 1 , 2 , 3 , 4 , 5 ]
rotateArray(array)
print ( * array)
|
Java
import java.util.Arrays;
public class Main {
public static void rotateArray( int [] array, int size)
{
int last = array[size - 1 ];
for ( int i = size - 1 ; i > 0 ; i--) {
array[i] = array[i - 1 ];
}
array[ 0 ] = last;
}
public static void main(String[] args)
{
int [] array = { 1 , 2 , 3 , 4 , 5 };
int size = array.length;
rotateArray(array, size);
System.out.println(Arrays.toString(array));
}
}
|
Javascript
function rotateArray(array) {
const last = array[array.length - 1];
for (let i = array.length - 1; i > 0; i--) {
array[i] = array[i - 1];
}
array[0] = last;
}
const array = [1, 2, 3, 4, 5];
rotateArray(array);
console.log(array);
|
C#
using System;
class Program {
static void RotateArray( int [] array, int size) {
int last = array[size - 1];
for ( int i = size - 1; i > 0; i--) {
array[i] = array[i - 1];
}
array[0] = last;
}
static void Main( string [] args) {
int [] array = { 1, 2, 3, 4, 5 };
int size = array.Length;
RotateArray(array, size);
for ( int i = 0; i < size; i++) {
Console.Write($ "{array[i]} " );
}
}
}
|
Time Complexity: O(n), as we are reversing the array. Where n is the number of elements in the array.
Auxiliary Space: O(1), as we are using constant space.
Another approach(Using Reversal Algorithm ):
The idea is to reverse the array two times. First time we will reverse the first n-1(n=size of array) elements. Finally, we will get our rotated array by reversing the entire array.
C++
#include <iostream>
using namespace std;
int main()
{
int arr[] = { 1,2,3,4,5};
int n = sizeof (arr) / sizeof (arr[0]);
int k = 1;
int i, j;
cout << "Given array is \n" ;
for (i = 0; i < n; i++)
cout << arr[i] << " " ;
for (i = 0, j = n - k - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (i = 0, j = n - 1; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
cout << "\nRotated array is\n" ;
for (i = 0; i < n; i++)
cout << arr[i] << " " ;
return 0;
}
|
Java
import java.util.*;
class Main {
public static void main(String[] args)
{
int [] arr = { 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
int k = 1 ;
int i, j;
System.out.println( "Given array is " );
for (i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
for (i = 0 , j = n - k - 1 ; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (i = 0 , j = n - 1 ; i < j; i++, j--) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
System.out.println( "\nRotated array is" );
for (i = 0 ; i < n; i++)
System.out.print(arr[i] + " " );
}
}
|
Python3
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
k = 1
i, j = 0 , 0
print ( "Given array is" )
for i in range (n):
print (arr[i], end = " " )
for i, j in zip ( range ( 0 , (n - k) / / 2 ), range (n - k - 1 , (n - k) / / 2 - 1 , - 1 )):
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
for i, j in zip ( range ( 0 , n / / 2 ), range (n - 1 , n / / 2 - 1 , - 1 )):
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
print ( "\nRotated array is" )
for i in range (n):
print (arr[i], end = " " )
|
C#
using System;
class Program
{
static void Main( string [] args)
{
int [] arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
int k = 1;
int i, j;
Console.WriteLine( "Given array is:" );
for (i = 0; i < n; i++)
Console.Write(arr[i] + " " );
for (i = 0, j = n - k - 1; i < j; i++, j--)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (i = 0, j = n - 1; i < j; i++, j--)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
Console.WriteLine( "\nRotated array is:" );
for (i = 0; i < n; i++)
Console.Write(arr[i] + " " );
Console.ReadLine();
}
}
|
Javascript
let arr = [1, 2, 3, 4, 5];
let n = arr.length;
let k = 1;
let i, j;
console.log( "Given array is" );
for (i = 0; i < n; i++) {
process.stdout.write(arr[i] + " " );
}
for (i = 0, j = n - k - 1; i < j; i++, j--) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for (i = 0, j = n - 1; i < j; i++, j--) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
console.log( "\nRotated array is" );
console.log();
for (i = 0; i < n; i++) {
process.stdout.write(arr[i] + " " );
}
|
OutputGiven array is
1 2 3 4 5
Rotated array is
5 1 2 3 4
Time Complexity: O(n), as we are reversing the array. Where n is the number of elements in the array.
Auxiliary Space: O(1), as we are using constant space.
Please Login to comment...