📖 Scenario: You are working on a puzzle game where you need to find all possible orders of a set of unique numbers. This helps the game create different challenges by rearranging the numbers in every possible way.
🎯 Goal: Build a program in C that generates and prints all permutations of a given array of integers.
📋 What You'll Learn
Create an integer array called arr with the exact values 1, 2, 3
Create an integer variable called n that stores the size of arr
Write a function called swap that swaps two integers by their pointers
Write a recursive function called permute that generates all permutations of arr
Print each permutation on a separate line with elements separated by spaces
💡 Why This Matters
🌍 Real World
Generating permutations is useful in games, puzzles, and testing all possible arrangements of items.
💼 Career
Understanding recursion and permutations helps in algorithm design, problem solving, and coding interviews.
Progress0 / 4 steps
1
Create the array and its size
Create an integer array called arr with the exact values 1, 2, 3. Also create an integer variable called n that stores the size of arr.
DSA C
Hint
Use int arr[] = {1, 2, 3}; to create the array and int n = 3; for its size.
2
Write a swap function
Write a function called swap that takes two integer pointers a and b and swaps the values they point to.
DSA C
Hint
Use a temporary variable to hold one value while swapping.
3
Write the recursive permute function
Write a recursive function called permute that takes an integer start. It should generate all permutations of arr by swapping elements starting from index start to n - 1. When start equals n, print the current permutation.
DSA C
Hint
Use recursion and swap elements to generate permutations. Remember to swap back after recursive call.
4
Call permute and print all permutations
In the main function, call permute(0) to generate and print all permutations of arr.
DSA C
Hint
Call permute(0) inside main and return 0.
Practice
(1/5)
1. What does the process of generating all permutations of an array mean?
easy
A. Finding the maximum element in the array
B. Sorting the array in ascending order
C. Listing all possible orders of the array elements
D. Removing duplicate elements from the array
Solution
Step 1: Understand permutations
Permutations are all possible ways to arrange elements in order.
Step 2: Apply to array elements
Generating all permutations means listing every possible order of the array elements.
Final Answer:
Listing all possible orders of the array elements -> Option C
Quick Check:
Permutations = all orders [OK]
Hint: Permutations = all ways to arrange elements [OK]
Common Mistakes:
Confusing permutations with sorting
Thinking permutations remove duplicates
Mixing permutations with finding max/min
2. Which of the following is the correct base case for a recursive function generating all permutations of an array arr of size n?
easy
A. if (start > n) { print(arr); return; }
B. if (start == n) { print(arr); return; }
C. if (n == 0) { return; }
D. if (start == 0) { print(arr); return; }
Solution
Step 1: Understand recursion base case
The base case occurs when the start index reaches the array size, meaning a full permutation is formed.
Step 2: Match base case condition
Condition start == n means all positions are fixed, so print the permutation and return.
Final Answer:
if (start == n) { print(arr); return; } -> Option B
Quick Check:
Base case when start equals array size [OK]
Hint: Base case: start index equals array length [OK]
Common Mistakes:
Using start > n instead of start == n
Printing when start == 0 (start of recursion)
Missing base case leading to infinite recursion
3. What is the output of the following C code snippet?
void permute(int *arr, int start, int n) {
if (start == n) {
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
return;
}
for (int i = start; i < n; i++) {
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
permute(arr, start + 1, n);
temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
}
}
int main() {
int arr[] = {1, 2};
permute(arr, 0, 2);
return 0;
}
medium
A. 1 2 \n 2 1 \n
B. 1 2 \n 1 2 \n
C. 2 1 \n 1 2 \n
D. No output
Solution
Step 1: Trace first call permute(arr, 0, 2)
Start=0, loop i=0 to 1. Swap arr[0] with arr[0], call permute(arr,1,2).
Step 2: Trace second call permute(arr, 1, 2)
Start=1, loop i=1 to 1. Swap arr[1] with arr[1], call permute(arr,2,2). Base case reached, print "1 2".
Step 3: Backtrack and swap arr[0] with arr[1]
Now arr = {2,1}. Call permute(arr,1,2) again, print "2 1".
Final Answer:
1 2
2 1
-> Option A
Quick Check:
All permutations of [1,2] printed [OK]
Hint: Swap and backtrack to generate permutations [OK]
Common Mistakes:
Not swapping back after recursive call
Printing incomplete permutations
Confusing loop indices
4. Identify the error in the following code snippet that generates permutations of an array arr of size n:
void permute(int *arr, int start, int n) {
if (start == n) {
for (int i = 0; i < n; i++) printf("%d ", arr[i]);
printf("\n");
return;
}
for (int i = start; i < n; i++) {
int temp = arr[start];
arr[start] = arr[i];
arr[i] = temp;
permute(arr, start + 1, n);
// Missing swap back here
}
}
medium
A. Missing swap back after recursive call causes incorrect permutations
B. Base case condition should be start > n
C. Loop should run from i = 0 to n
D. Printing inside base case is incorrect
Solution
Step 1: Understand swap and backtrack
After swapping and recursive call, we must swap back to restore original array for next iteration.
Step 2: Identify missing swap back
The comment shows swap back is missing, so array stays changed, causing wrong permutations.
Final Answer:
Missing swap back after recursive call causes incorrect permutations -> Option A
Quick Check:
Swap back needed to restore array [OK]
Hint: Always swap back after recursion to restore array [OK]
Common Mistakes:
Forgetting to swap back after recursion
Changing loop range incorrectly
Wrong base case condition
5. Given an array arr = {1, 2, 2}, how many unique permutations will a correct algorithm generate that avoids duplicates?
hard
A. 6
B. 2
C. 4
D. 3
Solution
Step 1: Calculate total permutations without duplicates
For 3 elements with two '2's, total permutations = 3! / 2! = 3.
Step 2: List unique permutations
Unique permutations are: [1,2,2], [2,1,2], [2,2,1]. But careful with counting duplicates in generation.