void quick_sort(int a[], int l, int r) {
if (l+1 >= r) return;
int left = l;
int right = r-1;
int pivot = a[l];
while(left < right) {
while(left < right && a[right] > pivot) right--;
a[left] = a[right];
while(left < right && a[left]<pivot) left++;
a[right] = a[left];
}
a[left] = pivot;
quick_sort(a, l, left);
quick_sort(a, left+1, right);
}
void swap(vector<int> &nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
int partition(vector<int> &nums, int left, int right) {
int i = left, j = right;
while (i < j) {
while (i < j && nums[j] >= nums[left])
j--;
while (i < j && nums[i] <= nums[left])
i++;
swap(nums, i, j);
}
swap(nums, i, left);
return i;
}
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);
}