一、题目描述
 

 
二、算法原理
 

 
三、代码实现
 
class Solution {
public:
    int getRandom(int left,int right,vector<int>& nums)
    {
        return nums[rand()%(right-left+1)+left];
    }
    int qsort(int l,int r,vector<int>& nums,int k)
    {
        if(i==r)
        {
            return nums[l];
        }
        int key=getRandom(l,r,nums);
        int i=l,left=l-1,right=r+1;
        while(i<right)
        {
            if(nums[i]<key)
                swap(nums[++left],nums[i++]);
            else if(nums[i]>key)
                swap(nums[i],nums[--right]);
            else
                i++;
        }
        int c=r-right+1,b=right-left-1,a=left-l+1;
        if(c>=k)
        {
            return qsort(right,r,nums,k);
        }
        else if(b+c>=k)
            return key;
        else
        {
            return qsort(l,left,nums,k-b-c);
        }
    }
    int findKthLargest(vector<int>& nums, int k) 
    {
        srand(time(NULL));
        return qsort(0,nums.size()-1,nums,k);     
    }
};