# Quick Sort [The Algorithms - Quick Sort](https://the-algorithms.com/algorithm/quick-sort) ## Approach - Make the right-most index value pivot - partition the array using pivot value - quicksort left partition recursively - quicksort right partition recursively ## Time Complexity - $O(n^2)$ Worst case performance - $O(n \cdot \log n)$ Best-case performance - $O(n \cdot \log n)$ Average performance ## Space Complexity - $O(\log n)$ Worst case ## Implementation :::spoiler Hint ```cpp= #include <bits/stdc++.h> using namespace std; // Function to partition the array around a pivot element int partition() { // Choose the rightmost element as the pivot // Pointer to track the boundary of elements <= pivot // Iterate through the range from left to right-1 for () { // If current element is less than or equal to pivot, swap it with the element at 'pointer' if () { // Increment pointer after swap } } // Swap the pivot element with the element at 'pointer' to place the pivot in its correct position // Return the index of the pivot element } // Function to perform quicksort on the array void quickSort() { // Base case: if the range is valid // Partition the array and get the pivot index // Recursively apply quicksort to the sub-arrays // Left sub-array // Right sub-array } ``` ::: :::spoiler Solution ```cpp #include <bits/stdc++.h> using namespace std; int partition(vector<int>& nums, int left, int right) { int pivot = nums[right]; int pointer = left; for (int i = left; i < right; i++) { if (nums[i] <= pivot) { swap(nums[pointer++], nums[i]); } } swap(nums[pointer], nums[right]); return pointer; } void quickSort(vector<int>& nums, int left, int right) { if(left >= right) return; int pivot = partition(nums, left, right); quickSort(nums, left, pivot - 1); quickSort(nums, pivot + 1, right); } int main() { vector<int> nums = {5, 4, 3, 2, 1}; quickSort(nums, 0, nums.size() - 1); for (auto& num : nums) printf("%d ", num); return 0; } ```