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 firstname.lastname@example.org. 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
- Write a program to print all permutations of a given string
- Print all permutations with repetition of characters
- Print all permutations in sorted (lexicographic) order
- Anagram Substring Search (Or Search for all permutations)
- Print all distinct permutations of a given string with duplicates
- Print all palindrome permutations of a string
- Permutations of a given string using STL
- All permutations of a string using iteration
- Count permutations that produce positive result
- Longest common subsequence with permutations allowed
- Sum of all numbers that can be formed with permutations of n digits
- Check if two arrays are permutations of each other
- Stack Permutations (Check if an array is stack permutation of other)
- Generate all cyclic permutations of a number
- Permutations to arrange N persons around a circular table
- Generate permutations with only adjacent swaps allowed
- Print all the palindromic permutations of given string in alphabetic order