Print array after it is right rotated K times | Set 2
Last Updated :
30 Nov, 2023
Given an array arr[] of size N and a value K, the task is to print the array rotated by K times to the right.
Examples:
Input: arr = {1, 3, 5, 7, 9}, K = 2
Output: 7 9 1 3 5
Input: arr = {1, 2, 3, 4, 5}, K = 4
Output: 2 3 4 5 1
Algorithm: The given problem can be solved by reversing subarrays. Below steps can be followed to solve the problem:
- Reverse all the array elements from 1 to N -1
- Reverse the array elements from 1 to K – 1
- Reverse the array elements from K to N -1
C++
#include <bits/stdc++.h>
using namespace std;
void RightRotate( int Array[], int N, int K)
{
reverse(Array, Array + N);
reverse(Array, Array + K);
reverse(Array + K, Array + N);
for ( int i = 0; i < N; i++) {
cout << Array[i] << " " ;
}
cout << endl;
}
int main()
{
int Array[] = { 1, 2, 3, 4, 5 };
int N = sizeof (Array) / sizeof (Array[0]);
int K = 4;
RightRotate(Array, N, K);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static void RightRotate( int [] Array, int N, int K)
{
for ( int i = 0 ; i < N / 2 ; i++) {
int temp = Array[i];
Array[i] = Array[N - i - 1 ];
Array[N - i - 1 ] = temp;
}
for ( int i = 0 ; i < K / 2 ; i++) {
int temp = Array[i];
Array[i] = Array[K - i - 1 ];
Array[K - i - 1 ] = temp;
}
for ( int i = 0 ; i < (N-K) / 2 ; i++) {
int temp = Array[(i + K)];
Array[(i + K)] = Array[(N - i - 1 )];
Array[(N - i - 1 )] = temp;
}
for ( int i = 0 ; i < N; i++) {
System.out.print(Array[i] + " " );
}
System.out.println();
}
public static void main(String[] args)
{
int Array[] = { 1 , 2 , 3 , 4 , 5 };
int N = Array.length;
int K = 4 ;
RightRotate(Array, N, K);
}
}
|
Python3
import math
def RightRotate(Array, N, K):
for i in range (math.ceil(N / 2 )):
temp = Array[i]
Array[i] = Array[N - i - 1 ]
Array[N - i - 1 ] = temp
for i in range (math.ceil(K / 2 )):
temp = Array[i]
Array[i] = Array[K - i - 1 ]
Array[K - i - 1 ] = temp
for i in range (math.ceil((N - K) / 2 )):
temp = Array[(i + K)]
Array[(i + K)] = Array[(N - i - 1 )]
Array[(N - i - 1 )] = temp
for i in range (N):
print (Array[i], end = " " )
arr = [ 1 , 2 , 3 , 4 , 5 ]
N = len (arr)
K = 4
RightRotate(arr, N, K)
|
C#
using System;
class GFG
{
static void RightRotate( int []Array, int N, int K)
{
for ( int i = 0; i < N / 2; i++) {
int temp = Array[i];
Array[i] = Array[N - i - 1];
Array[N - i - 1] = temp;
}
for ( int i = 0; i < K / 2; i++) {
int temp = Array[i];
Array[i] = Array[K - i - 1];
Array[K - i - 1] = temp;
}
for ( int i = 0; i < (N-K) / 2; i++) {
int temp = Array[(i + K)];
Array[(i + K)] = Array[(N - i - 1)];
Array[(N - i - 1)] = temp;
}
for ( int i = 0; i < N; i++) {
Console.Write(Array[i] + " " );
}
}
public static void Main()
{
int []Array = { 1, 2, 3, 4, 5 };
int N = Array.Length;
int K = 4;
RightRotate(Array, N, K);
}
}
|
Javascript
<script>
function RightRotate(Array, N, K)
{
for (let i = 0; i < N / 2; i++) {
let temp = Array[i];
Array[i] = Array[N - i - 1];
Array[N - i - 1] = temp;
}
for (let i = 0; i < K / 2; i++) {
let temp = Array[i];
Array[i] = Array[K - i - 1];
Array[K - i - 1] = temp;
}
for (let i = 0; i < (N-K) / 2; i++) {
let temp = Array[(i + K)];
Array[(i + K)] = Array[(N - i - 1)];
Array[(N - i - 1) % N] = temp;
}
for (let i = 0; i < N; i++) {
document.write(Array[i] + " " );
}
}
let arr = [ 1, 2, 3, 4, 5 ];
let N = arr.length;
let K =4;
RightRotate(arr, N, K);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Print array after it is right rotated K times using Recursion
Step-by-step approach:
- If “k” = 0, return the array “arr” and terminate the recursion.
- Else, move the last element to the first position and rotate the array “arr” to the right by one position by moving each element one position to the right.
- Recursively call the “rotateArray()” function with the same array “arr”, of size “n”, and k-1.
- Return the rotated array “arr” and terminate the recursion.
Below is the implementation of the above Recursive approach:
C++
#include <bits/stdc++.h>
using namespace std;
void rotateArray( int arr[], int n, int k)
{
if (k == 0) {
return ;
}
int temp = arr[n - 1];
for ( int i = n - 1; i > 0; i--) {
arr[i] = arr[i - 1];
}
arr[0] = temp;
rotateArray(arr, n, k - 1);
}
int main()
{
int arr[] = { 1, 3, 5, 7, 9 };
int n = sizeof (arr) / sizeof (arr[0]);
int k = 2;
rotateArray(arr, n, k);
for ( int i = 0; i < n; i++) {
cout << arr[i] << " " ;
}
cout << endl;
return 0;
}
|
C
#include <stdio.h>
void rotateArray( int arr[], int n, int k) {
if (k == 0) {
return ;
}
int temp = arr[n-1];
for ( int i = n-1; i > 0; i--) {
arr[i] = arr[i-1];
}
arr[0] = temp;
rotateArray(arr, n, k-1);
}
int main() {
int arr[] = {1, 3, 5, 7, 9};
int n = sizeof (arr)/ sizeof (arr[0]);
int k = 2;
rotateArray(arr, n, k);
for ( int i = 0; i < n; i++) {
printf ( "%d " , arr[i]);
}
printf ( "\n" );
return 0;
}
|
Java
import java.util.*;
public class Main {
public static void rotateArray( int [] arr, int n, int k) {
if (k == 0 ) {
return ;
}
int temp = arr[n- 1 ];
for ( int i = n- 1 ; i > 0 ; i--) {
arr[i] = arr[i- 1 ];
}
arr[ 0 ] = temp;
rotateArray(arr, n, k- 1 );
}
public static void main(String[] args) {
int [] arr = { 1 , 3 , 5 , 7 , 9 };
int n = arr.length;
int k = 2 ;
rotateArray(arr, n, k);
for ( int i = 0 ; i < n; i++) {
System.out.print(arr[i] + " " );
}
System.out.println();
}
}
|
Python
from __future__ import print_function
def GFG(arr, n, k):
if k = = 0 :
return
temp = arr[n - 1 ]
for i in range (n - 1 , 0 , - 1 ):
arr[i] = arr[i - 1 ]
arr[ 0 ] = temp
GFG(arr, n, k - 1 )
if __name__ = = "__main__" :
arr = [ 1 , 3 , 5 , 7 , 9 ]
n = len (arr)
k = 2
GFG(arr, n, k)
for i in range (n):
print (arr[i], end = " " )
print ()
|
C#
using System;
public class GFG {
public static void rotateArray( int [] arr, int n, int k) {
if (k == 0) {
return ;
}
int temp = arr[n-1];
for ( int i = n-1; i > 0; i--) {
arr[i] = arr[i-1];
}
arr[0] = temp;
rotateArray(arr, n, k-1);
}
public static void Main() {
int [] arr = {1, 3, 5, 7, 9};
int n = arr.Length;
int k = 2;
rotateArray(arr, n, k);
for ( int i = 0; i < n; i++) {
Console.Write(arr[i] + " " );
}
Console.WriteLine();
}
}
|
Javascript
function rotateArray(arr, n, k) {
if (k === 0) {
return ;
}
const temp = arr[n-1];
for (let i = n-1; i > 0; i--) {
arr[i] = arr[i-1];
}
arr[0] = temp;
rotateArray(arr, n, k-1);
}
const arr = [1, 3, 5, 7, 9];
const n = arr.length;
const k = 2;
rotateArray(arr, n, k);
console.log(arr);
|
Time Complexity: O(k*n)
Auxiliary Space: O(k)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...