Bird
Raised Fist0
DSA C++programming~5 mins

Sort Colors Two Pointer Dutch Flag in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind the Dutch National Flag algorithm for sorting colors?
It uses three pointers to separate the array into three parts: all 0s to the left, all 2s to the right, and all 1s in the middle, sorting the colors in one pass.
Click to reveal answer
beginner
In the Dutch Flag algorithm, what do the three pointers represent?
The pointers represent: low - boundary for 0s, mid - current element being checked, high - boundary for 2s.
Click to reveal answer
intermediate
Why does the Dutch Flag algorithm run in O(n) time?
Because it makes only one pass through the array, moving pointers and swapping elements without nested loops.
Click to reveal answer
beginner
What happens when the mid pointer encounters a 0 in the Dutch Flag algorithm?
Swap the element at mid with the element at low, then increment both low and mid pointers.
Click to reveal answer
intermediate
How does the algorithm handle encountering a 2 at the mid pointer?
Swap the element at mid with the element at high, then decrement high pointer without incrementing mid immediately.
Click to reveal answer
What is the initial position of the 'high' pointer in the Dutch Flag algorithm?
AAt the middle of the array
BAt the first index of the array
CAt the last index of the array
DAt the second index of the array
When the mid pointer points to a 1, what does the algorithm do?
AJust increment mid pointer
BSwap with low pointer and increment both
CSwap with high pointer and decrement high
DStop the algorithm
Which of these is NOT a color represented in the Sort Colors problem?
A0
B1
C2
D3
What is the main advantage of the Dutch Flag algorithm over sorting the array normally?
AIt sorts in one pass with constant space
BIt sorts in multiple passes
CIt only works for sorted arrays
DIt uses extra memory
What happens if you increment mid after swapping with high when mid points to 2?
AIt will sort correctly anyway
BYou might skip checking the swapped element
CThe algorithm will be faster
DIt will cause an infinite loop
Explain the step-by-step process of the Dutch Flag algorithm for sorting colors.
Think about how the array is divided into three parts and how each color is placed.
You got /5 concepts.
    Why is the Dutch Flag algorithm efficient for sorting an array with only three distinct values?
    Consider time and space complexity compared to general sorting.
    You got /5 concepts.

      Practice

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

      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 C
      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 integer array
      • Confusing it with general sorting algorithms
      • Assuming it reverses the array
      2. Which of the following is the correct initialization of pointers in the Dutch National Flag algorithm in C++?
      easy
      A. int low = 0, mid = n - 1, high = 0;
      B. int low = 0, mid = 0, high = n - 1;
      C. int low = n - 1, mid = 0, high = 0;
      D. int low = 0, mid = 0, high = 0;

      Solution

      1. Step 1: Understand pointer roles

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

        int low = 0, mid = 0, high = n - 1; correctly initializes low and mid to 0, and high to n-1.
      3. Final Answer:

        int low = 0, mid = 0, high = n - 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:
      • Setting low or mid to n-1 incorrectly
      • Initializing all pointers to zero
      • Confusing high pointer position
      3. What will be the output of the following C++ code snippet?
      std::vector<int> nums = {2, 0, 2, 1, 1, 0};
      int low = 0, mid = 0, high = nums.size() - 1;
      while (mid <= high) {
        if (nums[mid] == 0) {
          std::swap(nums[low], nums[mid]);
          low++; mid++;
        } else if (nums[mid] == 1) {
          mid++;
        } else {
          std::swap(nums[mid], nums[high]);
          high--;
        }
      }
      for (int num : nums) std::cout << num << " ";
      medium
      A. 0 0 1 1 2 2
      B. 2 2 1 1 0 0
      C. 0 1 0 1 2 2
      D. 1 0 2 0 1 2

      Solution

      1. Step 1: Trace the sorting process

        Initially: {2,0,2,1,1,0} - Swap 2 and 0 at low and mid, low=1, mid=1 - mid points to 0, swap with low, low=2, mid=2 - mid points to 2, swap with high (0), high=4 - mid points to 0, swap with low, low=3, mid=3 - mid points to 1, mid++ - mid points to 1, mid++ Loop ends.
      2. Step 2: Final array after sorting

        The array becomes: 0 0 1 1 2 2
      3. Final Answer:

        0 0 1 1 2 2 -> Option A
      4. Quick Check:

        Sorted colors output = 0 0 1 1 2 2 [OK]
      Hint: Swap 0s left, 2s right, 1s stay middle [OK]
      Common Mistakes:
      • Not swapping correctly when nums[mid] == 2
      • Incrementing mid after swapping with high
      • Confusing pointer updates
      4. Identify the error in the following C++ code implementing the Dutch National Flag algorithm:
      int low = 0, mid = 0, high = n - 1;
      while (mid < high) {
        if (nums[mid] == 0) {
          std::swap(nums[low], nums[mid]);
          low++;
          mid++;
        } else if (nums[mid] == 1) {
          mid++;
        } else {
          std::swap(nums[mid], nums[high]);
          high--;
        }
      }
      medium
      A. Pointers low and mid should start at n - 1
      B. The high pointer should be incremented instead of decremented
      C. Swapping should be done only when nums[mid] == 1
      D. The loop condition should be 'mid <= high' instead of 'mid < high'

      Solution

      1. Step 1: Analyze loop condition

        The loop uses 'mid < high', which misses the case when mid equals high, leaving last element unsorted.
      2. Step 2: Correct loop condition

        Changing to 'mid <= high' ensures all elements are processed including when mid equals high.
      3. Final Answer:

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

        Loop must cover mid == high for full sorting [OK]
      Hint: Use 'mid <= high' to cover all elements [OK]
      Common Mistakes:
      • Using 'mid < high' misses last element
      • Starting pointers incorrectly
      • Wrong pointer increments or decrements
      5. Given an array nums containing only 0s, 1s, and 2s, how would you modify the Dutch National Flag algorithm to count how many swaps are performed during sorting?
      hard
      A. Add a counter variable and increment it each time a swap is done inside the loop
      B. Count the number of 0s, 1s, and 2s before sorting
      C. Increment a counter every time mid pointer moves
      D. Count swaps only when nums[mid] == 1

      Solution

      1. Step 1: Understand when swaps happen

        Swaps occur when nums[mid] is 0 or 2, swapping with low or high pointers respectively.
      2. Step 2: Implement swap counting

        Introduce an integer counter initialized to zero, increment it inside the loop each time std::swap is called.
      3. Final Answer:

        Add a counter variable and increment it each time a swap is done inside the loop -> Option A
      4. Quick Check:

        Count swaps by incrementing on each swap call [OK]
      Hint: Increment counter inside swap blocks only [OK]
      Common Mistakes:
      • Counting pointer moves instead of swaps
      • Counting swaps for 1s which are not swapped
      • Counting before sorting instead of during
      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