置换元素和非置换元素
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.
问题陈述:编写一个c程序来循环置换array的元素 。 (从右到左方向)。 数组应作为用户的输入。
Explanation with example:
举例说明:
Let the user input for the array be: 4 5 6 7 8 10 11 34 56 1
让用户输入该数组为: 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
因此,该数组变为: 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.
也就是说,第一个元素变为最后一个元素,其余元素移位一个位置。
Algorithm:
算法:
    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实现 (C Implementation for 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 
翻译自: https://www.includehelp.com/c-programs/cyclically-permute-the-elements-of-an-array.aspx
置换元素和非置换元素