Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Sort Colors Two Pointer Dutch Flag in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Dutch Flag Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Dutch Flag Algorithm on Mixed Colors
What is the output of the following code after sorting the colors using the Dutch Flag algorithm?
DSA Python
def sortColors(nums):
    low, mid, high = 0, 0, len(nums) - 1
    while mid <= high:
        if nums[mid] == 0:
            nums[low], nums[mid] = nums[mid], nums[low]
            low += 1
            mid += 1
        elif nums[mid] == 1:
            mid += 1
        else:
            nums[mid], nums[high] = nums[high], nums[mid]
            high -= 1

nums = [2, 0, 2, 1, 1, 0]
sortColors(nums)
print(nums)
A[0, 0, 1, 1, 2, 2]
B[1, 0, 2, 0, 1, 2]
C[2, 2, 1, 1, 0, 0]
D[0, 1, 0, 1, 2, 2]
Attempts:
2 left
💡 Hint
Think about how the pointers low, mid, and high move and swap elements.
🧠 Conceptual
intermediate
1:00remaining
Number of Passes in Dutch Flag Algorithm
How many passes over the array does the Dutch Flag algorithm make to sort colors?
ADepends on the input size
BOne pass
CThree passes
DTwo passes
Attempts:
2 left
💡 Hint
Consider how the pointers move through the array.
🔧 Debug
advanced
2:00remaining
Identify the Bug in Dutch Flag Implementation
What error will this code produce when run?
DSA Python
def sortColors(nums):
    low, mid, high = 0, 0, len(nums) - 1
    while mid < high:
        if nums[mid] == 0:
            nums[low], nums[mid] = nums[mid], nums[low]
            low += 1
            mid += 1
        elif nums[mid] == 1:
            mid += 1
        else:
            nums[mid], nums[high] = nums[high], nums[mid]
            high -= 1

nums = [2, 0, 1]
sortColors(nums)
print(nums)
AIndexError
B[0, 1, 2]
CSyntaxError
DInfinite loop
Attempts:
2 left
💡 Hint
Check the loop condition carefully.
❓ Predict Output
advanced
2:00remaining
Final Array State After Sorting
What is the final state of the array after running this code?
DSA Python
def sortColors(nums):
    low, mid, high = 0, 0, len(nums) - 1
    while mid <= high:
        if nums[mid] == 0:
            nums[low], nums[mid] = nums[mid], nums[low]
            low += 1
            mid += 1
        elif nums[mid] == 1:
            mid += 1
        else:
            nums[mid], nums[high] = nums[high], nums[mid]
            high -= 1

nums = [1, 2, 0, 1, 2, 0, 1]
sortColors(nums)
print(nums)
A[0, 0, 1, 1, 1, 2, 2]
B[0, 1, 0, 1, 2, 1, 2]
C[2, 2, 1, 1, 0, 0, 1]
D[1, 0, 2, 0, 1, 2, 1]
Attempts:
2 left
💡 Hint
Remember the order: all 0s first, then 1s, then 2s.
🧠 Conceptual
expert
1:30remaining
Why Dutch Flag Algorithm is Optimal for Sorting Colors?
Why is the Dutch Flag algorithm considered optimal for sorting an array containing only 0s, 1s, and 2s?
AIt sorts the array by counting each color and then overwriting
BIt uses recursion to divide and conquer the array
CIt sorts the array in one pass with constant extra space
DIt uses built-in sort which is optimized for small ranges
Attempts:
2 left
💡 Hint
Think about time complexity and space usage.

Practice

(1/5)
1. What is the main goal of the Sort Colors Two Pointer Dutch Flag algorithm?
easy
A. To reverse the elements of an array
B. To sort any array of integers in ascending order
C. To find the maximum element in an array
D. To sort an array containing only 0s, 1s, and 2s in a single pass

Solution

  1. Step 1: Understand the problem context

    The algorithm is designed specifically for arrays with only three distinct values: 0, 1, and 2.
  2. Step 2: Identify the algorithm's purpose

    It sorts these values in one pass using two pointers, placing all 0s first, then 1s, then 2s.
  3. Final Answer:

    To sort an array containing only 0s, 1s, and 2s in a single pass -> Option D
  4. 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 array, not just 0,1,2
  • Confusing it with general sorting algorithms
  • Assuming it requires multiple passes
2. Which of the following is the correct initialization of pointers in the Dutch Flag algorithm in Python?
easy
A. low, mid, high = 0, len(nums) - 1, 0
B. low, mid, high = 0, 0, len(nums) - 1
C. low, mid, high = len(nums) - 1, 0, 0
D. low, mid, high = len(nums) - 1, len(nums) - 1, 0

Solution

  1. Step 1: Recall pointer roles

    Low and mid start at the beginning (index 0), high starts at the end (last index).
  2. Step 2: Match initialization

    So, low = 0, mid = 0, high = len(nums) - 1 is correct.
  3. Final Answer:

    low, mid, high = 0, 0, len(nums) - 1 -> Option B
  4. 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:
  • Swapping high and mid initialization
  • Starting pointers at wrong indices
  • Using length instead of length-1 for high
3. What will be the output of the following code snippet?
nums = [2, 0, 2, 1, 1, 0]
low, mid, high = 0, 0, len(nums) - 1
while mid <= high:
    if nums[mid] == 0:
        nums[low], nums[mid] = nums[mid], nums[low]
        low += 1
        mid += 1
    elif nums[mid] == 1:
        mid += 1
    else:
        nums[mid], nums[high] = nums[high], nums[mid]
        high -= 1
print(nums)
medium
A. [0, 1, 0, 1, 2, 2]
B. [2, 2, 1, 1, 0, 0]
C. [0, 0, 1, 1, 2, 2]
D. [1, 0, 1, 0, 2, 2]

Solution

  1. Step 1: Trace the algorithm on input

    Initially nums = [2,0,2,1,1,0]. The algorithm swaps 0s to front, 2s to end, 1s stay in middle.
  2. Step 2: Final sorted array

    After the loop, nums becomes [0,0,1,1,2,2], sorted by color.
  3. Final Answer:

    [0, 0, 1, 1, 2, 2] -> Option C
  4. Quick Check:

    Sorted colors = [0,0,1,1,2,2] [OK]
Hint: Remember: 0s front, 1s middle, 2s end [OK]
Common Mistakes:
  • Not swapping correctly when nums[mid] == 2
  • Incrementing mid after swapping with high
  • Confusing order of pointers
4. Identify the bug in the following Dutch Flag algorithm code:
nums = [2, 0, 1]
low, mid, high = 0, 0, len(nums) - 1
while mid < high:
    if nums[mid] == 0:
        nums[low], nums[mid] = nums[mid], nums[low]
        low += 1
        mid += 1
    elif nums[mid] == 1:
        mid += 1
    else:
        nums[mid], nums[high] = nums[high], nums[mid]
        high -= 1
print(nums)
medium
A. The loop condition should be 'mid <= high' instead of 'mid < high'
B. Pointers low and mid are initialized incorrectly
C. Swapping logic for nums[mid] == 0 is wrong
D. The decrement of high should be after incrementing mid

Solution

  1. Step 1: Analyze loop condition

    The loop runs while mid < high, so it stops when mid == high, missing last element check.
  2. Step 2: Correct loop condition

    It should be mid <= high to process all elements including when mid equals high.
  3. Final Answer:

    The loop condition should be 'mid <= high' instead of 'mid < high' -> Option A
  4. Quick Check:

    Loop must cover mid == high [OK]
Hint: Use 'mid <= high' to cover all elements [OK]
Common Mistakes:
  • Using 'mid < high' misses last element
  • Changing pointer initialization unnecessarily
  • Incorrect swap logic for 0 or 2
5. Given an array nums = [1, 2, 0, 1, 2, 0, 1], how many swaps will the Dutch Flag algorithm perform to sort it?
hard
A. 4
B. 5
C. 3
D. 6

Solution

  1. Step 1: Trace swaps during sorting

    Initial: [1,2,0,1,2,0,1] low=0, mid=0, high=6
    - mid=0 (1): mid=1 (no swap)
    - mid=1 (2): swap(1,6) -> [1,1,0,1,2,0,2] high=5 (swap 1)
    - mid=1 (1): mid=2
    - mid=2 (0): swap(0,2) -> [0,1,1,1,2,0,2] low=1 mid=3 (swap 2)
    - mid=3 (1): mid=4
    - mid=4 (2): swap(4,5) -> [0,1,1,1,0,2,2] high=4 (swap 3)
    - mid=4 (0): swap(1,4) -> [0,0,1,1,1,2,2] low=2 mid=5 (swap 4)
  2. Step 2: Total swaps counted

    There are 4 swaps in total during the process.
  3. Final Answer:

    4 -> Option A
  4. Quick Check:

    Count swaps carefully during pointer moves [OK]
Hint: Count swaps when 0 or 2 moves happen [OK]
Common Mistakes:
  • Counting pointer moves as swaps
  • Missing swaps when swapping with same element
  • Not tracing all pointer changes
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard