📖 Scenario: You are working on sorting a list of numbers efficiently. Quick Sort is a popular sorting method that uses a step called partitioning to organize elements around a pivot.There are two common ways to partition: Lomuto and Hoare. Understanding how these work helps you grasp Quick Sort better.
🎯 Goal: Build two partition functions for Quick Sort: one using the Lomuto method and one using the Hoare method. Then apply them to a sample array to see how the array changes after partitioning.
📋 What You'll Learn
Create an integer array called arr with the exact values: 8, 3, 7, 6, 2, 5, 4, 1
Create two integer variables low and high with values 0 and 7 respectively
Write a function lomutoPartition that partitions arr using the Lomuto scheme
Write a function hoarePartition that partitions arr using the Hoare scheme
Print the array after applying lomutoPartition and after applying hoarePartition
💡 Why This Matters
🌍 Real World
Quick Sort is widely used in software to sort data quickly, such as organizing names, numbers, or records in databases and applications.
💼 Career
Understanding partition methods is essential for software engineers and developers working on algorithms, data processing, and performance optimization.
Progress0 / 4 steps
1
Create the array arr
Create an integer array called arr with these exact values: 8, 3, 7, 6, 2, 5, 4, 1
DSA C++
Hint
Use C++ array syntax: int arr[] = {values};
2
Create low and high variables
Create two integer variables called low and high with values 0 and 7 respectively
DSA C++
Hint
Use simple integer variable declarations.
3
Write the Lomuto partition function
Write a function called lomutoPartition that takes arr, low, and high as parameters and partitions the array using the Lomuto scheme. Use the last element as pivot. Return the partition index.
DSA C++
Hint
Use the last element as pivot. Move smaller elements to the left. Swap pivot to correct position.
4
Write the Hoare partition function and print results
Write a function called hoarePartition that takes arr, low, and high as parameters and partitions the array using the Hoare scheme. Use the first element as pivot. Return the partition index. Then print the array after applying lomutoPartition and after applying hoarePartition on the original array.
DSA C++
Hint
Use the first element as pivot for Hoare. Move indices inward and swap elements. Print arrays after partitioning.
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
Step 1: Understand Lomuto partition
Lomuto partition uses one pointer to track the boundary of smaller elements and swaps elements accordingly.
Step 2: Understand Hoare partition
Hoare partition uses two pointers starting from both ends moving inward to swap elements around the pivot.
Final Answer:
Lomuto uses a single pointer, Hoare uses two pointers moving inward -> Option A
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
Step 1: Check return type
Lomuto partition returns the pivot index as int after partitioning.
Step 2: Check parameters
It takes array, low index, and high index as parameters to partition the subarray.
Final Answer:
int partition(int arr[], int low, int high) -> Option A
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
Step 1: Choose pivot and initialize pointers
Pivot = arr[4] = 2, i = -1 initially.
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].
Final Answer:
[2, 3, 7, 6, 8] -> Option D
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
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.
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.
Final Answer:
No bug, code is correct -> Option B
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
Step 1: Set pivot and pointers
Pivot = arr[0] = 10, i = low - 1 = -1, j = high + 1 = 7.
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.
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.
Final Answer:
[10, 80, 30, 90, 40, 50, 70] -> Option C
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 unknownstrongwhile earning +1 Grip toward your certificate.