public class KthLargestElement {
public static int findKthLargest(int[] nums, int k) {
if (nums == null || nums.length == 0 || k < 1 || k > nums.length) {
return -1;
}
return quickSelect(nums, 0, nums.length - 1, k);
}
private static int quickSelect(int[] nums, int start, int end, int k) {
int pivot = nums[start];
int left = start + 1;
int right = end;
while (true) {
while (left <= right && nums[left] > pivot) {
left++;
}
while (left <= right && nums[right] < pivot) {
right--;
}
if (left > right) {
break;
}
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
left++;
right--;
}
int temp = nums[start];
nums[start] = nums[right];
nums[right] = temp;
if (right == k - 1) {
return nums[right];
} else if (right > k - 1) {
return quickSelect(nums, start, right - 1, k);
} else {
return quickSelect(nums, right + 1, end, k);
}
}
public static void main(String[] args) {
int[] arr = {3, 2, 1, 5, 6, 4};
int k = 2;
int kthLargest = findKthLargest(arr, k);
System.out.println("第" + k + "大的元素是:" + kthLargest);
}
}