1. Brute Force (Out-of-Place Array Filtering)
Intuition
Picks the middle element as pivot and creates 3 fresh lists (less, equal, greater), recursing on less and greater.
Algorithm
- Step 1: If array length <= 1, return array copy.
- Step 2: Choose pivot = nums[length / 2].
- Step 3: Filter into left (x < pivot), mid (x == pivot), and right (x > pivot).
- Step 4: Return quickSort(left) + mid + quickSort(right).
Brute Force (Out-of-Place Array Filtering) Trace
2 of 2 questions left todayPhase 1 — Setup: Algorithm initializes tracking variables and sets initial inspection pointers for Quick Sort
Phase 1 — Setup: Algorithm initializes tracking variables and sets initial inspection pointers for Quick Sort.
#include <iostream>#include <vector> class Solution {public: std::vector<int> quickSortOutOfPlace(const std::vector<int>& nums) { if (nums.size() <= 1) return nums; int pivot = nums[nums.size() / 2]; std::vector<int> left, mid, right; for (int x : nums) { if (x < pivot) left.push_back(x); else if (x == pivot) mid.push_back(x); else right.push_back(x); } left = quickSortOutOfPlace(left); right = quickSortOutOfPlace(right); std::vector<int> result; result.insert(result.end(), left.begin(), left.end()); result.insert(result.end(), mid.begin(), mid.end()); result.insert(result.end(), right.begin(), right.end()); return result; }}; int main() { Solution sol; std::vector<int> nums = {5, 2, 3, 1}; std::vector<int> res = sol.quickSortOutOfPlace(nums); std::cout << "Sorted: "; for (int x : res) std::cout << x << " "; std::cout << std::endl; return 0;}Time & Space Complexity
- Time complexity:
O(N^2)— Time complexity for Brute Force (Out-of-Place Array Filtering). - Space complexity:
O(1)— Space complexity for Brute Force (Out-of-Place Array Filtering).
Why Brute Force Doesn't Scale:
Naive pivot selection triggers stack overflow on 50,000 sorted elements. Median-of-three selection and Hoare inward traversal achieves exceptional cache line locality and O(N log N) performance.
On an array of 100,000 sorted integers: Naive first-element QuickSort takes ~10 billion operations (and stack overflows); Median-of-three Hoare QuickSort completes in ~1.5 million operations (< 10 ms).