Program to Cyclically Rotate an Array by k Positions
Cyclically Rotate an Array by K
Here, in this page we will discuss the program for cyclically rotate an array by k positions. We are given with an integer array and value of k, and need to print the array after cyclically rotate it by k positions.Method Discussed :
- Method 1 : Using Temporary Array.
- Method 2 : By rotating elements one by one.
- Method 3 : By Using the reversing Concept.
- Method 3 : Using juggling algorithm
Let’s discuss all the above methods one by one in brief,
Method 1 :
In this method we will declare an extra array to store some k elements. Here, k refers to number of rotations.
- Declare a temporary array of size k.
- Store the first k elements in temp[] array.
- Now, shift the remaining elements.
- After, shifting the elements add the elements of temp[] in the array
Code in C
Code in C++
Code in Java
Code in C
Run
//Write a program to cyclically rotate an array by k #include <stdio.h> /* Driver program to test above functions */ int main() { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = sizeof(arr)/sizeof(arr[0]); int k = 4; int temp_arr[k]; for(int i=0; i<k; i++) temp_arr[i] = arr[i]; int x = k; for(int i=0; x < n; i++){ arr[i] = arr[x++]; } x = 0; for(int i=n-k; i<n; i++) arr[i] = temp_arr[x++]; for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; }
Code in C++
Run
//Write a program to cyclically rotate an array by k #include <bits/stdc++.h> using namespace std; /* Driver program to test above functions */ int main() { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = sizeof(arr)/sizeof(arr[0]); int k = 4; int temp_arr[k]; for(int i=0; i<k; i++) temp_arr[i] = arr[i]; int x = k; for(int i=0; x < n; i++){ arr[i] = arr[x++]; } x = 0; for(int i=n-k; i<n; i++) arr[i] = temp_arr[x++]; for (int i = 0; i < n; i++) cout<< arr[i]<<" "; return 0; }
Code in Java
Run
class Main { public static void main(String[] args) { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = arr.length; int k = 4; int[] temp; temp = new int[n]; for(int i=0; i< k; i++) temp[i] = arr[i]; int x = k; for(int i=0; x < n; i++){ arr[i] = arr[x++]; } x = 0; for(int i=n-k; i<n; i++) arr[i] = temp[x++]; for (int i = 0; i < 7; i++) System.out.print(arr[i] + " "); } }
Output
50 60 70 10 20 30 40
Method 2 :
In this method we cyclically rotate the array by shifting elements one by one.
Code in C
Code in C++
Code in Python
Code in Java
Code in C
Run
//Write a program to cyclically rotate an array by k #include <stdio.h> void cyclicRotatebyOne(int arr[], int n) { int temp = arr[0], i; for (i = 0; i < n - 1; i++) arr[i] = arr[i + 1]; arr[n-1] = temp; } void cyclicRotate(int arr[], int k, int n) { for (int i = 0; i < k; i++) cyclicRotatebyOne(arr, n); } /* Driver program to test above functions */ int main() { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = sizeof(arr)/sizeof(arr[0]); int k = 4; cyclicRotate(arr, k, n); for (int i = 0; i < n; i++) printf("%d ", arr[i]); return 0; }
Code in C++
Run
//Write a program to cyclically rotate an array by k #include <bits/stdc++.h> using namespace std; void cyclicRotatebyOne(int arr[], int n) { int temp = arr[0], i; for (i = 0; i < n - 1; i++) arr[i] = arr[i + 1]; arr[n-1] = temp; } void cyclicRotate(int arr[], int k, int n) { for (int i = 0; i < k; i++) cyclicRotatebyOne(arr, n); } /* Driver program to test above functions */ int main() { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = sizeof(arr)/sizeof(arr[0]); int k = 4; cyclicRotate(arr, k, n); for (int i = 0; i < n; i++) cout<< arr[i]<<" "; return 0; }
Code in Python
Run
#Write a program for array rotation in Python # Python3 program to rotate an array by def leftRotate(arr, d, n): for i in range(d): leftRotatebyOne(arr, n) # Function to left Rotate arr[] of size n by 1*/ def leftRotatebyOne(arr, n): temp = arr[0] for i in range(n-1): arr[i] = arr[i + 1] arr[n-1] = temp # utility function to print an array */ def printArray(arr, size): for i in range(size): print ("% d"% arr[i], end =" ") # Driver program to test above functions */ arr = [10, 20, 30, 40, 50, 60, 70] leftRotate(arr, 4, 7) printArray(arr, 7)
Code in Java
Run
class Main { public static void main(String[] args) { int arr[] = { 10, 20, 30, 40, 50, 60, 70}; int n = arr.length; int k = 4; int[] temp; temp = new int[n]; for(int i=0; i<k; i++) temp[i] = arr[i]; int x = k; for(int i=0; x < n; i++){ arr[i] = arr[x++]; } x = 0; for(int i=n-k; i<n; i++) arr[i] = temp[x++]; for (int i = 0; i < 7; i++) System.out.print(arr[i] + " "); } }
Output
50 60 70 10 20 30 40
Method 3 :
- Set K to points that element which comes at first position, i.e. K = N-K.
- Reverse the array from 0 to K-1 position.
- Again reverse the array from K to N-1 position.
- And then finally reverse the entire array.
- Doing so we will get the desired circularly rotated array by K position.
Code in C++
Code in C++
Run
//Write a program to cyclically rotate an array by k #include <bits/stdc++.h> using namespace std; /* Driver program to test above functions */ int main() { std::vectorarr= { 10, 20, 30, 40, 50, 60, 70}; int n = arr.size(); int k = 3; k = n-k; reverse(arr.begin(), arr.begin()+k); reverse(arr.begin()+k, arr.end()); reverse(arr.begin(), arr.end()); for (int i = 0; i < n; i++) cout<< arr[i]<<" "; return 0; }
Output
50 60 70 10 20 30 40
Method 4 :
In this method we will use the concept of juggling algorithm for cyclically rotate the array by K positions.
You can check out the page for understanding it’s algorithm.
Code in C
Code in C++
Code in Java
Code in Python
Code in C
Run
//Write a program to cyclically rotate an array by k #include <stdio.h> int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } void ArrayRotate(int A[], int n, int k) { int d = -1, i, temp, j; for (i = 0; i < gcd(n, k); i++) { j = i; temp = A[i]; while (1) { d = (j + k) % n; if (d == i) break; A[j] = A[d]; j = d; } A[j] = temp; } } void displayArray(int A[], int n) { int i; for (i = 0; i < n; i++) printf("%d ", A[i]); } int main() { int n = 7, i, k = 4; int A[7] = {10, 20, 30, 40, 50, 60, 70}; ArrayRotate(A, n, k); displayArray(A, n); return 0; }
Code in C++
Run
//Write a program to cyclically rotate an array by k #include <bits/stdc++.h> using namespace std; int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } void ArrayRotate(int A[], int n, int k) { int d = -1, i, temp, j; for (i = 0; i < gcd(n, k); i++) { j = i; temp = A[i]; while (1) { d = (j + k) % n; if (d == i) break; A[j] = A[d]; j = d; } A[j] = temp; } } void displayArray(int A[], int n) { int i; for (i = 0; i < n; i++) cout<<A[i]<<" "; } int main() { int n = 7, i, k = 4; int A[n] = {10, 20, 30, 40, 50, 60, 70}; ArrayRotate(A, n, k); displayArray(A, n); return 0; }
Code in Java
Run
//Write a program to cyclically rotate an array by k public class Main { public static int hcf(int a, int c) { if (c == 0) return a; else return hcf(c, a % c); } //Function to left rotate array of by d number of rotations public static void leftRotate(int arr[], int d, int n) { int i, l, m, temp; for (i = 0; i < hcf(d, n); i++) // hcf(d,n) times the loop will iterate { // move i-th values of blocks temp = arr[i]; l = i; while (true) { m = l + d; if (m >= n) // The element has to be shifted to its rotated position m = m - n; if (m == i) // The element is already in its rotated position break; arr[l] = arr[m]; l = m; } arr[l] = temp; } } // Main function public static void main(String[] args) { int arr[] = { 10, 20, 30, 40, 50, 60, 70 }; int no_of_rotation = 4; int n = arr.length; leftRotate(arr, no_of_rotation, n); for(int i = 0 ; i < n ; i++) { System.out.print(arr[i] + " "); } } }
Code in Python
Run
import math def leftRotate(arr, d, n): for i in range(math.gcd(d, n)): temp = arr[i] j = i while 1: k = j + d if k >= n: k = k - n if k == i: break arr[j] = arr[k] j = k arr[j] = temp arr =[10, 20, 30, 40, 50, 60, 70] n = len(arr) no_of_rotations = 4 leftRotate(arr, no_of_rotations, n ) print(*arr)
Output
50 60 70 10 20 30 40
Prime Course Trailer
Related Banners
Get PrepInsta Prime & get Access to all 200+ courses offered by PrepInsta in One Subscription
Get over 200+ course One Subscription
Courses like AI/ML, Cloud Computing, Ethical Hacking, C, C++, Java, Python, DSA (All Languages), Competitive Coding (All Languages), TCS, Infosys, Wipro, Amazon, DBMS, SQL and others
import java.util.*;
public class Main
{
public static void main (String[]args)
{
int[] arr= {10, 20, 30, 40, 50, 60, 70};
int k=4-1;
reverse(arr,0,arr.length-k-1);
reverse(arr,arr.length-k,arr.length-1);
reverse(arr,0,arr.length-1);
for(int val:arr){
System.out.print(val+” “);
}
}
public static void reverse(int[] arr,int i,int j){
while(i<j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
i++;
j–;
}
}
}