class Solution {
public:
  //完整快速排序后,第K大的数一定在K-1的下标处;
  //利用二分法, 减少处理;
    int findKth(vector<int>& a, int n, int K) {
        return quikSelect(a, 0, n-1, K-1);
    }

    int quikSelect(vector<int>& a, int left, int right, int k){
        if(left == right) return a[left];

        int pivotIndex = partition(a, left, right);

        if(pivotIndex == k){
            return a[pivotIndex];
        }else if(pivotIndex > k){
            return quikSelect(a, left, pivotIndex-1, k);
        }else if(pivotIndex < k){
            return quikSelect(a, pivotIndex+1, right, k);
        }

        return -1;
    }

    int partition(vector<int>& a, int left, int right){  //快速排序
        int pivot = a[right];
        int i=left;

        for(int j=left; j<right; ++j){
            if(a[j] > pivot){
                swap(a[i], a[j]);
                ++i;
            }
        }

        swap(a[i], a[right]);
        return i;
    }
};