Heap’s algorithm is used to generate all permutations of n objects. The idea is to generate each permutation from the previous permutation by choosing a pair of elements to interchange, without disturbing the other n-2 elements.
Following is the illustration of generating all the permutations of n given numbers.
Input: 1 2 3 Output: 1 2 3 2 1 3 3 1 2 1 3 2 2 3 1 3 2 1
- The algorithm generates (n-1)! permutations of the first n-1 elements, adjoining the last element to each of these. This will generate all of the permutations that end with the last element.
- If n is odd, swap the first and last element and if n is even, then swap the ith element (i is the counter starting from 0) and the last element and repeat the above algorithm till i is less than n.
- In each iteration, the algorithm will produce all the permutations that end with the current last element.
1 2 3 2 1 3 3 1 2 1 3 2 2 3 1 3 2 1
This article is contributed by Rahul Agrawal .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.
- Generate all binary permutations such that there are more or equal 1's than 0's before every point in all permutations
- Generating Lyndon words of length n
- Generating all divisors of a number using its prime factorization
- Permutations of a given string using STL
- Distinct permutations of the string | Set 2
- Problem on permutations and combinations | Set 2
- Possible permutations at a railway track
- Missing Permutations in a list
- Print the two possible permutations from a given sequence
- Check if two arrays are permutations of each other
- Number of palindromic permutations | Set 1
- All permutations of a string using iteration
- Generate all possible permutations of a Number divisible by N
- Print all permutations with repetition of characters
- Generate all cyclic permutations of a number
- Check if a Sequence is a concatenation of two permutations
- Count the number of special permutations
- Permutations of string such that no two vowels are adjacent
- Check if two Linked Lists are permutations of each other
- Count permutations that are first decreasing then increasing.