# std::next_permutation and prev_permutation in C++

**std::next_permutation**

It is used to rearrange the elements in the range [first, last) into the next lexicographically greater permutation. A permutation is each one of the N! possible arrangements the elements can take (where N is the number of elements in the range). Different permutations can be ordered according to how they compare lexicographically to each other.

**Syntax: **

template bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);Parameters:first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.return value:true :if the function could rearrange the object as a lexicographicaly greater permutation. Otherwise, the function returns false to indicate that the arrangementis not greater than the previous, but the lowest possible (sorted in ascending order).

**Application : **next_permutation is to find next lexicographicaly greater value for given array of values.

Examples:

Input : next permutation of 1 2 3 is Output : 1 3 2 Input : next permutation of 4 6 8 is Output : 4 8 6

`// C++ program to illustrate ` `// next_permutation example ` ` ` `// this header file contains next_permutation function ` `#include <algorithm> ` `#include <iostream> ` `using` `namespace` `std; ` ` ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 1, 2, 3 }; ` ` ` ` ` `sort(arr, arr + 3); ` ` ` ` ` `cout << ` `"The 3! possible permutations with 3 elements:\n"` `; ` ` ` `do` `{ ` ` ` `cout << arr[0] << ` `" "` `<< arr[1] << ` `" "` `<< arr[2] << ` `"\n"` `; ` ` ` `} ` `while` `(next_permutation(arr, arr + 3)); ` ` ` ` ` `cout << ` `"After loop: "` `<< arr[0] << ` `' '` ` ` `<< arr[1] << ` `' '` `<< arr[2] << ` `'\n'` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

Output:

The 3! possible permutations with 3 elements: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 After loop: 1 2 3

**std::prev_permutation **

It is used to rearranges the elements in the range [first, last) into the previous lexicographically-ordered permutation. A permutation is each one of the N! possible arrangements the elements can take (where N is the number of elements in the range). Different permutations can be ordered according to how they compare lexicographicaly to each other.

**Syntax : **

template bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last );parameters:first, last : Bidirectional iterators to the initial and final positions of the sequence. The range used is [first, last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.return value:true :if the function could rearrange the object as a lexicographicaly smaller permutation. Otherwise, the function returns false to indicate that the arrangement is not less than the previous, but the largest possible (sorted in descending order).

**Application : ** prev_permutation is to find previous lexicographicaly smaller value for given array of values.

Examples:

Input : prev permutation of 3 2 1 is Output : 3 1 2 Input : prev permutation of 8 6 4 is Output :8 4 6

`// C++ program to illustrate ` `// prev_permutation example ` ` ` `// this header file contains prev_permutation function ` `#include <algorithm> ` ` ` `#include <iostream> ` `using` `namespace` `std; ` `int` `main() ` `{ ` ` ` `int` `arr[] = { 1, 2, 3 }; ` ` ` ` ` `sort(arr, arr + 3); ` ` ` `reverse(arr, arr + 3); ` ` ` ` ` `cout << ` `"The 3! possible permutations with 3 elements:\n"` `; ` ` ` `do` `{ ` ` ` `cout << arr[0] << ` `" "` `<< arr[1] << ` `" "` `<< arr[2] << ` `"\n"` `; ` ` ` `} ` `while` `(prev_permutation(arr, arr + 3)); ` ` ` ` ` `cout << ` `"After loop: "` `<< arr[0] << ` `' '` `<< arr[1] ` ` ` `<< ` `' '` `<< arr[2] << ` `'\n'` `; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

Output:

The 3! possible permutations with 3 elements: 3 2 1 3 1 2 2 3 1 2 1 3 1 3 2 1 2 3 After loop: 3 2 1

## Recommended Posts:

- Find the node whose sum with X has minimum set bits
- Salt and Pepper Noise removal using C++
- C++ Stream Classes Structure
- OpenMP | Hello World program
- Odd Even Transposition Sort / Brick Sort using pthreads
- Chat application between two processes using signals and shared memory
- Find k closest numbers in an unsorted array
- Intel Graphics Software Engineer Interview Experience
- OpenMP | Introduction with Installation Guide
- Equation of straight line passing through a given point which bisects it into two equal line segments
- Maximum absolute difference in an array
- Count the pairs of vowels in the given string
- Why overriding both the global new operator and the class-specific operator is not ambiguous?
- Print path from root to all nodes in a Complete Binary Tree
- Count the number of 1's and 0's in a binary array using STL in C++ ?

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.