Home »
C programs »
C one-dimensional array programs
C Program to Cyclically Permute the Elements of an Array
Here, we are implementing a C program, which will cyclically permute the elements of an array.
Submitted by Radib Kar, on December 12, 2018
Problem statement
Write a c program to cyclically permute the element of an array. (In right to left direction). Array should be taken as input from the user.
Explanation with example
Let the user input for the array be: 4 5 6 7 8 10 11 34 56 1
The cyclic permutation operation on the array results in rotation of the array by one position in right to left direction.
Thus the array becomes: 5 6 7 8 10 11 34 56 1 4
i.e. the first element becomes the last element & the rest of the elements are shifted by one position.
Pseudocode
To shift the (i+1)th element to the left
can be easily done only by:
A[i] =A[i+1]; // A is the input array
So it may seem that the entire shifting can be done by
For i =0:n-1
A[i] =A[(i+1)%n];
End For
But this will lead to wrong solution since for i=n-1
A[n-1]=A[0] which is correct statement but A[0] has been
updated already. This code snippet will result in
A[0] & A[n-1] to be same which is actually wrong.
So what we need to do is to store A[0] ( staring element)
and assign this value to A[n-1]
Thus, a little modification can lead to correct solution:
1. Set temp to A[0]
2. For i=0:n-1
If i==n-1
A[i]=temp; //actually it means A[n-1]=A[0]
Else
A[i]=A[i+1];
End If
End For
3. Print the updated array.
C Program to Cyclically Permute the Elements of an Array
#include <stdio.h>
#include <stdlib.h>
// function to print the array
void print(int* a, int n) {
printf("printing ........\n");
for (int i = 0; i < n; i++) printf("%d ", a[i]);
printf("\n");
}
int* cyclicallyPermute(int* a, int n) {
int temp = a[0]; // store a[0]
for (int i = 0; i < n; i++) {
// for the last element in the modified array
// it will be starting elemnt
if (i == n - 1) a[i] = temp;
// for other element shift left
else
a[i] = a[i + 1];
}
return a;
}
int main() {
int n;
printf("enter array length,n: ");
scanf("%d", &n);
// allocating array dynamically
int* a = (int*)(malloc(sizeof(int) * n));
printf("enter elements: \n");
// taking input
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
printf("array before permutation\n");
print(a, n);
// function to permute cyclically
// returning base adress of modified array
a = cyclicallyPermute(a, n);
printf("array after permutation\n");
print(a, n);
return 0;
}
Output
enter array length,n: 10
enter elements:
4 5 6 7 8 10 11 34 56 1
array before permutation
printing ........
4 5 6 7 8 10 11 34 56 1
array after permutation
printing ........
5 6 7 8 10 11 34 56 1 4
C One-Dimensional Array Programs »