Given an array, the task is to print or display all the reverse permutations of this array using STL in C++. Reverse permutation means, for an array {1, 2, 3}:
forward permutations: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 reverse permutations: 3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3
Examples:
Input: a[] = {1, 2, 3} Output: 3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3 Input: a[] = {10, 20, 30, 40} Output: Possible permutations are: 40 30 20 10 40 30 10 20 40 20 30 10 40 20 10 30 40 10 30 20 40 10 20 30 30 40 20 10 30 40 10 20 30 20 40 10 30 20 10 40 30 10 40 20 30 10 20 40 20 40 30 10 20 40 10 30 20 30 40 10 20 30 10 40 20 10 40 30 20 10 30 40 10 40 30 20 10 40 20 30 10 30 40 20 10 30 20 40 10 20 40 30 10 20 30 40
Approach: The next possible permutation of the array in reverse order can be found using prev_permutation() function provided in STL.
Syntax:
bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last);
Below is the implementation of the above Approach:
// C++ program to display all permutations // in reverse order // of an array using STL in C++ #include <bits/stdc++.h> using namespace std;
// Function to display the array void display( int a[], int n)
{ for ( int i = 0; i < n; i++) {
cout << a[i] << " " ;
}
cout << endl;
} // Function to find the permutations void findPermutations( int a[], int n)
{ // Sort the given array
sort(a, a + n);
reverse(a, a + n);
// Find all possible permutations
cout << "Possible permutations are:\n" ;
do {
display(a, n);
} while (prev_permutation(a, a + n));
} // Driver code int main()
{ int a[] = { 10, 20, 30, 40 };
int n = sizeof (a) / sizeof (a[0]);
findPermutations(a, n);
return 0;
} |
Output:
Possible permutations are: 40 30 20 10 40 30 10 20 40 20 30 10 40 20 10 30 40 10 30 20 40 10 20 30 30 40 20 10 30 40 10 20 30 20 40 10 30 20 10 40 30 10 40 20 30 10 20 40 20 40 30 10 20 40 10 30 20 30 40 10 20 30 10 40 20 10 40 30 20 10 30 40 10 40 30 20 10 40 20 30 10 30 40 20 10 30 20 40 10 20 40 30 10 20 30 40
Related Article: All permutations of an array using STL in C++