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 pivot come before it, and larger come after. It uses one index to track the boundary between smaller and larger elements.
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 that are on the wrong side of the pivot. It usually picks the first element as pivot and can be more efficient with fewer swaps.
Click to reveal answer
beginner
In Lomuto partition, what happens after the partitioning loop ends?
After the loop, the pivot is swapped with the element at the boundary index, placing the pivot in its correct sorted position.
Click to reveal answer
intermediate
Why might Hoare partition be preferred over Lomuto partition in some cases?
Hoare partition often performs fewer swaps and can be faster because it stops when indices cross, not necessarily placing the pivot at its final position immediately, which can reduce overhead.
Click to reveal answer
intermediate
What is the output of the Hoare partition function?
Hoare partition returns the index where the two pointers crossed, which is used to split the array for further recursive sorting.
Click to reveal answer
Which element is typically chosen as the pivot in Lomuto partition?
ALast element
BFirst element
CMiddle element
DRandom element
In Hoare partition, what happens when the two pointers cross?
APartitioning ends and index is returned
BPointers reset to start
CPivot is swapped with last element
DArray is fully sorted
Which partition scheme generally uses fewer swaps?
ALomuto
BDepends on array size
CHoare
DBoth equal
What does Lomuto partition return after partitioning?
ANumber of swaps done
BIndex of pivot's final position
CIndex where pointers crossed
DSorted array
Which partition scheme can pick the first element as pivot?
ANeither
BLomuto
CBoth
DHoare
Explain step-by-step how Lomuto partition rearranges an array around the pivot.
Think about how the boundary between smaller and larger elements moves.
You got /5 concepts.
    Describe how Hoare partition uses two pointers to partition the array.
    Imagine two people walking towards each other swapping misplaced items.
    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 recursion, Hoare uses iteration
      B. Lomuto sorts the array, Hoare reverses the array
      C. Lomuto uses a single pointer, Hoare uses two pointers moving inward
      D. Lomuto always picks the last element as pivot, Hoare picks the first element

      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 C
      4. Quick Check:

        Partition schemes differ by pointer usage = A [OK]
      Hint: Remember: Lomuto one pointer, Hoare two pointers [OK]
      Common Mistakes:
      • Confusing pivot selection with partition method
      • Thinking both use the same pointer approach
      • Assuming Hoare always picks first element as pivot
      2. Which of the following is the correct C# syntax to swap two elements in an array arr at indices i and j?
      easy
      A. arr[i] = arr[j]; arr[j] = arr[i];
      B. arr.Swap(i, j);
      C. swap(arr[i], arr[j]);
      D. int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;

      Solution

      1. Step 1: Understand swapping in C# arrays

        Swapping requires a temporary variable to hold one value while assigning the other.
      2. Step 2: Check each option

        The option "arr[i] = arr[j]; arr[j] = arr[i];" overwrites arr[i] before saving its value. "int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;" correctly uses a temp variable. "swap(arr[i], arr[j]);" and "arr.Swap(i, j);" are invalid syntax in C#.
      3. Final Answer:

        int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; -> Option D
      4. Quick Check:

        Use temp variable for swap = B [OK]
      Hint: Always use a temp variable to swap array elements [OK]
      Common Mistakes:
      • Overwriting one element before saving it
      • Using non-existent swap functions
      • Confusing syntax with other languages
      3. What is the output array after applying Lomuto partition on arr = [8, 3, 7, 6, 2] with pivot as last element?
      medium
      A. [2, 3, 7, 6, 8]
      B. [3, 2, 6, 7, 8]
      C. [2, 3, 6, 7, 8]
      D. [8, 3, 7, 6, 2]

      Solution

      1. Step 1: Identify pivot and initialize pointers

        Pivot is 2 (last element). Initialize i = -1.
      2. Step 2: Iterate and swap elements smaller than pivot

        Check elements: 8 > 2 no swap; 3 > 2 no swap; 7 > 2 no swap; 6 > 2 no swap. Finally swap pivot with arr[i+1] = arr[0].
      3. Step 3: Final array after swap

        Swap arr[0] and arr[4]: [2, 3, 7, 6, 8]
      4. Final Answer:

        [2, 3, 7, 6, 8] -> Option A
      5. Quick Check:

        Lomuto partitions around pivot = D [OK]
      Hint: Pivot ends at correct place after Lomuto partition [OK]
      Common Mistakes:
      • Swapping incorrectly during iteration
      • Confusing pivot position after partition
      • Mixing Hoare and Lomuto steps
      4. Identify the error in this Hoare partition code snippet in C#:
      int HoarePartition(int[] arr, int low, int high) {
          int pivot = arr[low];
          int i = low + 1;
          int j = high;
          while (true) {
              while (arr[i] < pivot) i++;
              while (arr[j] > pivot) j--;
              if (i >= j) return j;
              int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;
          }
      }
      medium
      A. Pivot should be last element, not first
      B. Pointers i and j can go out of array bounds causing runtime error
      C. Return statement should be i, not j
      D. Swap should happen before checking i >= j

      Solution

      1. Step 1: Analyze pointer increments

        i increments while arr[i] < pivot without boundary check; similarly j decrements without boundary check.
      2. Step 2: Identify risk of out-of-bounds

        If all elements are less or greater than pivot, i or j can move beyond array limits causing runtime error.
      3. Final Answer:

        Pointers i and j can go out of array bounds causing runtime error -> Option B
      4. Quick Check:

        Missing boundary checks cause errors = A [OK]
      Hint: Always check array bounds when moving pointers [OK]
      Common Mistakes:
      • Ignoring boundary checks in loops
      • Assuming pivot must be last element
      • Misplacing swap and return statements
      5. Given the array arr = [10, 80, 30, 90, 40, 50, 70], what is the array state after applying Hoare partition with pivot as arr[low] (first element)?
      hard
      A. [70, 30, 40, 50, 10, 80, 90]
      B. [10, 80, 30, 90, 40, 50, 70]
      C. [40, 30, 10, 50, 70, 80, 90]
      D. [50, 30, 40, 10, 70, 80, 90]

      Solution

      1. Step 1: Initialize pointers and pivot

        Pivot = 10 (arr[0]), i = low + 1 = 1, j = high = 6 (following the Hoare code style).
      2. Step 2: Move pointers inward and swap

        i moves forward while arr[i] < pivot: arr[1]=80 not <10, i stays 1. j moves backward while arr[j] > pivot: arr[6]=70 >10, j=5; arr[5]=50 >10, j=4; arr[4]=40 >10, j=3; arr[3]=90 >10, j=2; arr[2]=30 >10, j=1; arr[1]=80 >10, j=0. Now i=1, j=0, i >= j, so partition ends. But before that, swaps happen when i < j. The first swap occurs between arr[i]=80 and arr[j]=70 (positions 1 and 6), then pointers move inward. After completing swaps, the array becomes [70, 30, 40, 50, 10, 80, 90].
      3. Step 3: Resulting array after partition

        The array after Hoare partition is [70, 30, 40, 50, 10, 80, 90].
      4. Final Answer:

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

        Hoare partitions around first element pivot = B [OK]
      Hint: Hoare swaps inward around first element pivot [OK]
      Common Mistakes:
      • Assuming pivot moves to final position immediately
      • Confusing Lomuto and Hoare partition results
      • Not tracing pointer movements carefully
      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