运用快速排序的思想,但是要注意一点:第24行:if(left <= right)这个地方,只是排序的时候加不加等号都是一样的,但是这道题里一定要加上,要不然会直接跳错误。
还有就是一定不要忘了加&!!!!
class Solution {
public:
int findKth(vector<int>& a, int n, int K) {
return quickSort(a, 0, n - 1, K);
}
int partition(vector<int>& arr, int left, int right)
{
int pivot = arr[left];
while(left < right)
{
while(left < right && arr[right] <= pivot)
right--;
swap(arr, left, right);
while(left < right && arr[left] >= pivot)
left++;
swap(arr, left, right);
}
return left;
}
int quickSort(vector<int>& arr, int left, int right, int K)
{
if(left <= right)
{
int pivot_index = partition(arr, left, right);
if(pivot_index + 1 == K) return arr[pivot_index];
else if(pivot_index + 1 > K) return quickSort(arr, left, pivot_index - 1, K);
else return quickSort(arr, pivot_index + 1, right, K);
}
return -1;
}
void swap(vector<int>& arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
};


京公网安备 11010502036488号