int partition(vector<int>& arr, int low, int high) { // Choose the pivot int pivot = arr[high]; int i = low - 1; // Traverse arr[;ow..high] and move all smaller for (int j = low; j <= high - 1; j++) { if (arr[j] < pivot) { i++; swap(arr[i], arr[j]); } } // Move pivot after smaller elements and return its posn swap(arr[i + 1], arr[high]); return i + 1; } void quickSort(vector<int>& arr, int low, int high) { if (low < high) { // pi is the partition return index of pivot int pi = partition(arr, low, high); quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } }