class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
//输入数组和index
//创建随机数种子
srand(time(0));
//返回第k个最大的数的值
return quickSelect(nums,0,nums.size()-1,nums.size()-k);
//nums是输入的数组,输入数组序列的首尾序号,以及第k个最大数在数组中的序号
}
int quickSelect(vector<int>& a,int l,int r,int index){
//编辑快速排序子函数
//首先在数组中选取随机一个数将原数组分割为两个,并排序
int q = randomPartition(a,l,r);
//判断,如果返回的序号与index相同,则直接返回,否则重新分割,排序
if (q == index){
return a[q];
}
else{
return q < index ? quickSelect(a, q+1, r, index):quickSelect(a, l, q-1, index);
}
}
inline int randomPartition(vector<int>& a,int l,int r){
//选取【l,r】之间的随机整数,并将选取的数放置在数组尾部
int i = rand()%(r-l+1)+l;
swap(a[i],a[r]);
return partition(a,l,r);
}
inline int partition(vector<int>& a,int l,int r){
int x = a[r];
int i = l-1;
//遍历,排序
for(int j = l;j<r;++j){
if(a[j]<=x){
swap(a[++i],a[j]);
}
}
//随机数插入原位
swap(a[i+1],a[r]);
return i+1;
}
};