编程导航算法村 |快速排序习题练习
数组中第K大的数字
- LeetCode215 数组中的第K个最大元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
- 思路:
- 使用快速排序将数组进行升序排序,然后返回倒数第k个元素
public int findKthLargest(int[] nums, int k) {
quick(nums, 0, nums.length - 1);
return nums[nums.length - k];
}
void quick(int[] nums, int start, int end) {
if (start >=end) {
return;
}
int left = start;
int right = end;
int provide = nums[(left + right) / 2];
while (left <= right) {
while (left <= right && nums[left] < provide) {
left++;
}
while (left <= right && nums[right] > provide) {
right--;
}
if (left <= right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
}
quick(nums, start, right);
quick(nums, left, end);
}
while (left <= right && nums[left] > provide) {
left++;
}
while (left <= right && nums[right] < provide) {
right--;
}
~~