- 快速排序:
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); }