class Solution {
public int findKthLargest(int[] nums, int k) {
return quickSort(nums,0,nums.length - 1,nums.length - k);
}
private int quickSort(int[] nums, int l, int r, int index) {
int q = RandomPartition(nums,l,r);
if(q == index){
return nums[q];
}else {
return q < index ? quickSort(nums,q + 1,r,index) : quickSort(nums,l,q - 1,index);
}
}
private int RandomPartition(int[] nums, int l, int r) {
int random = new Random().nextInt(r - l + 1) + l;
swap(nums,l,random);
int i = l + 1,j = l;
for(;i <= r;i++){
if(nums[i] <= nums[l]){
j++;
swap(nums,j,i);
}
}
swap(nums,l,j);
return j;
}
private void swap(int[] nums, int index1, int index2) {
int temp = nums[index1];
nums[index1] = nums[index2];
nums[index2] = temp;
}
}