该快速排序算法出自《算法导论》
思想是,先利用一个partition函数将数组中大于pivot的元素放到右边,小于等于pivot的元素放到左边,然后用pivot将两个部分分割,返回pivot的位置p,再对子数组[start, p - 1]和[p + 1, end]进行排序即可。代码如下:
void quickSort(vector<int>& nums, int start, int end) { if(start >= end) return; int p = partition(nums, start, end); quickSort(nums, start, p - 1); quickSort(nums, p + 1, end); } int partition(vector<int>& nums, int start, int end) { int i, j, pivot = nums[end]; // use the last element as pivot for(i = start - 1, j = start; j < end; j++) { // i points to the last element that is smaller or equal to pivot if(nums[j] <= pivot) swap(nums[++i], nums[j]); } swap(nums[++i], nums[end]); // put pivot in correct position return i; }
。