What if you could sort three colors perfectly in just one quick pass?
Why Sort Colors Two Pointer Dutch Flag in DSA C?
Imagine you have a box of colored balls mixed together: red, white, and blue. You want to arrange them so all reds come first, then whites, then blues. Doing this by picking each ball and checking where to put it manually is tiring and slow.
Manually sorting each ball means checking every ball multiple times and moving them around again and again. This wastes time and can cause mistakes, like putting a red ball in the blue section by accident.
The two-pointer Dutch Flag method uses just a few pointers to sort the balls in one pass. It smartly swaps balls to their right places without extra space or repeated checks, making sorting fast and simple.
for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (colors[j] < colors[i]) { int temp = colors[i]; colors[i] = colors[j]; colors[j] = temp; } } }
int low = 0, mid = 0, high = n - 1; while (mid <= high) { if (colors[mid] == 0) { int temp = colors[low]; colors[low] = colors[mid]; colors[mid] = temp; low++; mid++; } else if (colors[mid] == 1) { mid++; } else { int temp = colors[mid]; colors[mid] = colors[high]; colors[high] = temp; high--; } }
This method lets you sort three groups quickly in one pass, saving time and effort in many real-world sorting tasks.
Sorting laundry by color: whites, darks, and colors. Instead of sorting each piece multiple times, you can quickly separate them in one go using this method.
Manual sorting is slow and error-prone.
Two-pointer Dutch Flag sorts in one pass efficiently.
It uses swapping and pointers to organize colors fast.
Practice
Sort Colors Two Pointer Dutch Flag algorithm?Solution
Step 1: Understand the problem context
The algorithm is designed specifically for arrays with only three distinct values: 0, 1, and 2.Step 2: Identify the sorting goal
The goal is to sort these values so that all 0s come first, then all 1s, and finally all 2s, in one pass without extra space.Final Answer:
To sort an array containing only 0s, 1s, and 2s in a single pass -> Option AQuick Check:
Sort Colors = Sort 0,1,2 in one pass [OK]
- Thinking it sorts any integer array
- Confusing it with general sorting algorithms
- Assuming it reverses the array
Solution
Step 1: Recall pointer roles
Low starts at 0 to track the boundary of 0s, mid starts at 0 to scan elements, high starts at n-1 to track boundary of 2s.Step 2: Match initialization
Only int low = 0, mid = 0, high = n - 1; correctly initializes low and mid at 0 and high at n-1.Final Answer:
int low = 0, mid = 0, high = n - 1; -> Option AQuick Check:
Pointers start low=0, mid=0, high=end [OK]
- Setting high to 0 instead of n-1
- Starting mid at n-1
- Confusing low and high initialization
arr = {2, 0, 2, 1, 1, 0}?Solution
Step 1: Trace the algorithm on input
Initial array: {2, 0, 2, 1, 1, 0}. After sorting: all 0s first, then 1s, then 2s.Step 2: Final sorted array
Sorted array is [0, 0, 1, 1, 2, 2].Final Answer:
[0, 0, 1, 1, 2, 2] -> Option CQuick Check:
Sorted colors = 0s, then 1s, then 2s [OK]
- Not sorting 0s and 2s correctly
- Mixing order of 1s and 0s
- Outputting original array
void sortColors(int* arr, int n) {
int low = 0, mid = 0, high = n - 1;
while (mid <= high) {
if (arr[mid] == 0) {
int temp = arr[low]; arr[low] = arr[mid]; arr[mid] = temp;
low++;
mid++;
} else if (arr[mid] == 1) {
mid++;
} else {
int temp = arr[mid]; arr[mid] = arr[high]; arr[high] = temp;
high--;
}
}
}Solution
Step 1: Analyze pointer increments
When swapping arr[mid] with arr[low] (for 0), low is incremented but mid is not incremented, causing infinite loop or wrong behavior.Step 2: Correct pointer movement
After swapping with low, both low and mid should be incremented to move forward.Final Answer:
Missing increment of mid after swapping with low -> Option BQuick Check:
Increment mid after swapping with low [OK]
- Not incrementing mid after swapping with low
- Incrementing mid after swapping with high
- Incorrect pointer initialization
arr = {1, 2, 0, 1, 2, 0, 1}, how many swaps will the Dutch National Flag algorithm perform to sort it?Solution
Step 1: Trace swaps during sorting
Initial array: {1, 2, 0, 1, 2, 0, 1}
- Swap 1: mid=1 (2) with high=6 (1) -> [1,1,0,1,2,0,2], high=5
mid=1 now 1 -> mid=2
- Swap 2: mid=2 (0) with low=0 (1) -> [0,1,1,1,2,0,2], low=1, mid=3
mid=3 (1) -> mid=4
- Swap 3: mid=4 (2) with high=5 (0) -> [0,1,1,1,0,2,2], high=4
mid=4 now 0 ->
- Swap 4: mid=4 (0) with low=1 (1) -> [0,0,1,1,1,2,2], low=2, mid=5 (stop)Step 2: Count total swaps
Total swaps counted are 4.Final Answer:
4 -> Option DQuick Check:
Count swaps carefully during pointer moves [OK]
- Counting pointer increments as swaps
- Missing swaps when swapping with high
- Undercounting swaps for consecutive swaps on same mid
Ready to prove it?
Pass the test and this pattern moves unknown
