• 快速排序:

  1.最左边的数值作为基准,比基准大的放右边,比基准小得放左边,双指针遍历一遍;

  2.相遇之后基准放中间;

  3.左右两侧的小区间进行递归操作。

void quickSort(vector<int>& nums, int start, int end) {
    if (start >= end) return;
    int i = start, j = end;
    int temp = nums[i];
    while (i < j) {
        // 先从后往前,遇到比temp小的数放到左边
        while (i < j && nums[j] >= temp) {
            j--;
        }
        nums[i] = nums[j];
        // 再从前往后,遇到比temp大的数放到右边
        while (i < j && nums[i] <= temp) {
            i++;
        }
        nums[j] = nums[i];
    }
    // i, j相遇,将temp放到相遇的位置
    nums[i] = temp;
    // 递归
    quickSort(nums, start, i - 1);
    quickSort(nums, i + 1, end);
}