class Solution {
Random random = new Random();
public int findKthLargest(int[] nums, int k) {
return quicksort(nums,0,nums.length - 1,nums.length - k);
}
public int quicksort(int[] nums,int l, int r,int k){
int q = randomSelect(nums,l,r);
if(q == k) return nums[q];
else{
return q > k ? quicksort(nums,l,q - 1,k):quicksort(nums,q + 1,r,k);
}
}
public int randomSelect(int[] nums,int l, int r){
int i = random.nextInt(r - l + 1) + l;
swap(nums,i,r);
return partition(nums,l,r);
}
public int partition(int[] nums,int l, int r){
int x = nums[r];
int i = l - 1;
for(int j = l; j < r;j++){
if(nums[j] <= x){
swap(nums,++i,j);
}
}
swap(nums,i + 1,r);
return i + 1;
}
public void swap(int[] nums,int l, int r){
int tmp = nums[l];
nums[l] = nums[r];
nums[r] = tmp;
}
}
快排的修改版,肥肠好用,
随机化快速选择算法实现寻找数组中第K大元素
该博客介绍了如何使用修改版的快速排序算法来找到数组中的第K个最大元素。通过引入随机化选择枢轴元素的方法,提高了在最坏情况下的效率。算法包括随机选择、快速排序和分区操作,实现了在平均情况下线性时间复杂度的查找过程。
409

被折叠的 条评论
为什么被折叠?



