int quickselect(vector<int> &nums, int left, int right, int k) {
if (left == right)
return nums[k];
int partition = nums[left], i = left - 1, j = right + 1;
while (i < j) {
do i++; while (nums[i] < partition);
do j--; while (nums[j] > partition);
if (i < j)
swap(nums[i], nums[j]);
}
if (k <= j)return quickselect(nums, left, j, k);
else return quickselect(nums, j + 1, right, k);
}
快速选择算法是基于快速排序算法改造出来的算法。主要用于快速选择无序数组中第k大的数。如果使用堆来选择第k大的元素,时间复杂度是O(nlogn)的,而快速选择平均情况下是O(n)的,证明从略