Bird
Raised Fist0
DSA C++programming~5 mins

Quick Sort Partition Lomuto and Hoare in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind the Lomuto partition scheme in Quick Sort?
Lomuto partition picks the last element as pivot and rearranges the array so that elements smaller than or equal to pivot come before it, and larger come after. It returns the pivot's final position.
Click to reveal answer
intermediate
How does the Hoare partition scheme differ from Lomuto's in Quick Sort?
Hoare partition uses two indices starting from both ends moving towards each other, swapping elements to ensure left side is smaller and right side is larger than pivot. It returns an index near the pivot but not necessarily its final position.
Click to reveal answer
beginner
Show the Lomuto partition pseudocode steps.
1. Choose last element as pivot. 2. Initialize i to low-1. 3. For each element j from low to high-1: - If arr[j] <= pivot, increment i and swap arr[i] and arr[j]. 4. Swap arr[i+1] and pivot. 5. Return i+1 as pivot index.
Click to reveal answer
intermediate
What is a key advantage of Hoare partition over Lomuto partition?
Hoare partition generally performs fewer swaps and can be more efficient, especially on large arrays, because it partitions in place with two pointers and stops earlier.
Click to reveal answer
beginner
What is the output of Lomuto partition on array [3, 8, 2, 5, 1, 4, 7, 6]?
After partitioning with pivot=6 (last element), array becomes [3, 2, 5, 1, 4, 6, 7, 8] and pivot index returned is 5.
Click to reveal answer
In Lomuto partition, which element is chosen as the pivot?
ARandom element
BFirst element
CMiddle element
DLast element
What does Hoare partition return after partitioning?
AIndex near pivot, not necessarily final
BFinal pivot position
CIndex of smallest element
DIndex of largest element
Which partition scheme generally uses fewer swaps?
AHoare
BDepends on array size
CBoth equal
DLomuto
In Lomuto partition, what happens when an element is less than or equal to the pivot?
AIt is swapped to the right side
BIt is swapped to the left side
CIt is ignored
DPartition ends
Which partition scheme uses two pointers moving inward from both ends?
ALomuto
BBoth
CHoare
DNeither
Explain step-by-step how Lomuto partition rearranges an array.
Think about how elements smaller than pivot are moved left.
You got /5 concepts.
    Describe the differences between Lomuto and Hoare partition schemes and when you might prefer one over the other.
    Consider how pointers move and what index is returned.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main difference between Lomuto and Hoare partition schemes in Quick Sort?
      easy
      A. Lomuto uses a single pointer, Hoare uses two pointers moving inward
      B. Lomuto sorts in descending order, Hoare sorts in ascending order
      C. Lomuto uses recursion, Hoare uses iteration
      D. Lomuto chooses the last element as pivot, Hoare chooses the first element always

      Solution

      1. Step 1: Understand Lomuto partition

        Lomuto partition uses one pointer to track the boundary of smaller elements and swaps elements accordingly.
      2. Step 2: Understand Hoare partition

        Hoare partition uses two pointers starting from both ends moving inward to swap elements around the pivot.
      3. Final Answer:

        Lomuto uses a single pointer, Hoare uses two pointers moving inward -> Option A
      4. Quick Check:

        Lomuto single pointer, Hoare two pointers inward [OK]
      Hint: Remember: Lomuto single pointer, Hoare two pointers inward [OK]
      Common Mistakes:
      • Confusing pivot selection with partition method
      • Thinking both use same pointer approach
      • Assuming Hoare always picks first element as pivot
      2. Which of the following is the correct Lomuto partition function header in C++?
      easy
      A. int partition(int arr[], int low, int high)
      B. void partition(int arr[], int low, int high)
      C. int partition(int arr[], int start, int end, int pivot)
      D. bool partition(int arr[], int low, int high)

      Solution

      1. Step 1: Check return type

        Lomuto partition returns the pivot index as int after partitioning.
      2. Step 2: Check parameters

        It takes array, low index, and high index as parameters to partition the subarray.
      3. Final Answer:

        int partition(int arr[], int low, int high) -> Option A
      4. Quick Check:

        Returns int pivot index, low high params [OK]
      Hint: Partition returns pivot index as int with low and high params [OK]
      Common Mistakes:
      • Using void return type instead of int
      • Adding extra pivot parameter unnecessarily
      • Returning bool instead of pivot index
      3. What is the output array after applying Lomuto partition on arr = [8, 3, 7, 6, 2] with low=0 and high=4?
      medium
      A. [2, 3, 6, 7, 8]
      B. [3, 2, 7, 6, 8]
      C. [8, 3, 7, 6, 2]
      D. [2, 3, 7, 6, 8]

      Solution

      1. Step 1: Choose pivot and initialize pointers

        Pivot = arr[4] = 2, i = -1 initially.
      2. Step 2: Iterate and swap smaller elements

        Check elements from index 0 to 3:
        - arr[0]=8 > 2 no swap
        - arr[1]=3 > 2 no swap
        - arr[2]=7 > 2 no swap
        - arr[3]=6 > 2 no swap
        After loop, swap arr[i+1]=arr[0] and pivot arr[4].
      3. Final Answer:

        [2, 3, 7, 6, 8] -> Option D
      4. Quick Check:

        Pivot swapped to front since no smaller elements [OK]
      Hint: Pivot last element, swap smaller left, pivot final swap [OK]
      Common Mistakes:
      • Swapping elements incorrectly during iteration
      • Confusing pivot position after partition
      • Assuming pivot is first element
      4. Identify the bug in this Hoare partition code snippet:
      int hoarePartition(int arr[], int low, int high) {
        int pivot = arr[low];
        int i = low - 1, j = high + 1;
        while (true) {
          do { i++; } while (arr[i] < pivot);
          do { j--; } while (arr[j] > pivot);
          if (i >= j) return j;
          std::swap(arr[i], arr[j]);
        }
      }
      medium
      A. Initialization of i and j is incorrect
      B. No bug, code is correct
      C. The loop condition should be i > j instead of i >= j
      D. Pivot should be arr[high], not arr[low]

      Solution

      1. Step 1: Verify pointer initialization

        In standard Hoare partition, i starts at low-1 and j at high+1 to work with the do-while loops correctly.
      2. Step 2: Check other parts

        Pivot selection arr[low], movement conditions arr[i] < pivot and arr[j] > pivot, i >= j return, and swap are all correct.
      3. Final Answer:

        No bug, code is correct -> Option B
      4. Quick Check:

        Standard Hoare uses i=low-1, j=high+1 [OK]
      Hint: i starts at low, j at high in Hoare partition [OK]
      Common Mistakes:
      • Setting i and j outside array bounds
      • Confusing pivot position with pointer initialization
      • Misusing loop exit condition
      5. Given the array [10, 80, 30, 90, 40, 50, 70], after applying Hoare partition with low=0 and high=6, what is the resulting array?
      hard
      A. [10, 30, 40, 50, 70, 90, 80]
      B. [10, 30, 40, 50, 90, 80, 70]
      C. [10, 80, 30, 90, 40, 50, 70]
      D. [10, 30, 40, 50, 80, 70, 90]

      Solution

      1. Step 1: Set pivot and pointers

        Pivot = arr[0] = 10, i = low - 1 = -1, j = high + 1 = 7.
      2. Step 2: Move pointers and check swaps

        do {i++;} while (arr[i] < 10): i=0, arr[0]=10 not <10, stop i=0.
        do {j--;} while (arr[j] > 10): j=6(70>10),5(50>10),4(40>10),3(90>10),2(30>10),1(80>10),0(10 not >10), stop j=0.
        i=0 < j=0 is false, so i >= j, return j=0, no swap.
        But since i == j, partition ends with pivot index 0.
        However, this means no swaps, so array remains same.
      3. Step 3: Re-examine pointer movement

        Actually, the do-while loops stop at i=0 and j=0, so no swaps occur.
        Therefore, the array remains unchanged.
      4. Final Answer:

        [10, 80, 30, 90, 40, 50, 70] -> Option C
      5. Quick Check:

        All elements ≥ pivot, array unchanged [OK]
      Hint: Track i and j moving inward, swap when i < j [OK]
      Common Mistakes:
      • Swapping after pointers cross
      • Misplacing pivot after partition
      • Confusing Hoare with Lomuto output
      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