public int findKth(int[] a, int n, int K) {
return quickFind(K, a, 0, n - 1);
}
public int quick(int nums[], int left, int right) {
int temp = nums[left]; // 枢纽值
while (left < right) {
while (temp >= nums[right] && left < right) {
right--;
}
nums[left] = nums[right];
while (temp <= nums[left] && left < right) {
left++;
}
nums[right] = nums[left];
}
nums[right] = temp;
return right;
}
public int quickFind(int K, int nums[], int left, int right) {
int temp = quick(nums, left, right);
if (temp == K - 1) {
return nums[temp];
} else if (temp > K - 1) {
return quickFind(K, nums, left, temp - 1);
} else {
return quickFind(K, nums, temp + 1, right);
}
}
快排思想找第K大的数
猜你喜欢
转载自blog.csdn.net/for62/article/details/108512564
今日推荐
周排行