运用快速排序的思想,但是要注意一点:第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;
    }
};