Sort Colors Using Two Pointer Dutch Flag Algorithm
📖 Scenario: You are working on a simple image processing tool that needs to sort pixels by their color codes. The colors are represented by numbers 0, 1, and 2, where 0 means red, 1 means white, and 2 means blue.To optimize the sorting, you will use the Dutch National Flag algorithm which sorts the colors in one pass using two pointers.
🎯 Goal: Build a program that sorts an array of colors represented by 0s, 1s, and 2s using the two-pointer Dutch Flag algorithm.
📋 What You'll Learn
Create an integer array called colors with the exact values: 2, 0, 2, 1, 1, 0
Create two integer variables called low and high to track positions
Implement the two-pointer Dutch Flag sorting logic using a while loop and a current index
Print the sorted array elements separated by spaces
💡 Why This Matters
🌍 Real World
Sorting colors efficiently is useful in image processing and graphics where pixels need to be grouped by color quickly.
💼 Career
Understanding two-pointer algorithms and in-place sorting is important for software engineering roles involving performance optimization and data manipulation.
Progress0 / 4 steps
1
Create the colors array
Create an integer array called colors with these exact values: 2, 0, 2, 1, 1, 0.
DSA C
Hint
Use curly braces to initialize the array with the exact numbers.
2
Create pointers for sorting
Create two integer variables called low and high. Set low to 0 and high to 5 (the last index of the array). Also create an integer variable current and set it to 0.
DSA C
Hint
Remember array indexes start at 0, so last index is 5 for 6 elements.
3
Implement the Dutch Flag sorting logic
Use a while loop with the condition current <= high. Inside the loop, use if statements to check the value at colors[current]. If it is 0, swap it with colors[low], then increment low and current. If it is 2, swap it with colors[high] and decrement high. If it is 1, just increment current.
DSA C
Hint
Swap elements when you find 0 or 2, move pointers accordingly, and move current forward for 1.
4
Print the sorted colors array
Use a for loop to print each element of the colors array separated by spaces on a single line.
DSA C
Hint
Use a loop to print all elements with spaces, then print a newline.
Practice
(1/5)
1. What is the main goal of the Sort Colors Two Pointer Dutch Flag algorithm?
easy
A. To sort an array containing only 0s, 1s, and 2s in a single pass
B. To sort any array of integers in ascending order
C. To find the maximum element in an array
D. To reverse the elements of an array
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 A
Quick Check:
Sort Colors = Sort 0,1,2 in one pass [OK]
Hint: Remember: Dutch Flag sorts 0,1,2 in one pass [OK]
Common Mistakes:
Thinking it sorts any integer array
Confusing it with general sorting algorithms
Assuming it reverses the array
2. Which of the following is the correct initialization for the pointers in the Dutch National Flag algorithm in C?
easy
A. int low = 0, mid = 0, high = n - 1;
B. int low = n - 1, mid = 0, high = 0;
C. int low = 0, mid = n - 1, high = 0;
D. int low = 0, mid = 0, high = 0;
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 A
Quick Check:
Pointers start low=0, mid=0, high=end [OK]
Hint: Start low and mid at 0, high at last index [OK]
Common Mistakes:
Setting high to 0 instead of n-1
Starting mid at n-1
Confusing low and high initialization
3. What will be the output array after running the Dutch National Flag algorithm on arr = {2, 0, 2, 1, 1, 0}?
medium
A. [2, 2, 1, 1, 0, 0]
B. [0, 1, 0, 1, 2, 2]
C. [0, 0, 1, 1, 2, 2]
D. [1, 0, 1, 0, 2, 2]
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 C
Quick Check:
Sorted colors = 0s, then 1s, then 2s [OK]
Hint: Sort 0s, then 1s, then 2s in one pass [OK]
Common Mistakes:
Not sorting 0s and 2s correctly
Mixing order of 1s and 0s
Outputting original array
4. Identify the error in this C code snippet implementing the Dutch National Flag algorithm:
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--;
}
}
}
medium
A. Missing decrement of high after swapping with low
B. Missing increment of mid after swapping with low
C. Missing increment of mid after swapping with high
D. Incorrect initialization of pointers
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 B
Quick Check:
Increment mid after swapping with low [OK]
Hint: Increment mid after swapping with low pointer [OK]
Common Mistakes:
Not incrementing mid after swapping with low
Incrementing mid after swapping with high
Incorrect pointer initialization
5. Given an array arr = {1, 2, 0, 1, 2, 0, 1}, how many swaps will the Dutch National Flag algorithm perform to sort it?