class Solution {
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
private int partition(int[] nums, int left, int right) {
if (left >= right) {
return left;
}
int i = left, j = right + 1;
int p = nums[left];
while (i <= j) {
while (i != right && nums[++i] > p) ;
while (j != left && nums[--j] < p) ;
if (i >= j) {
break;
}
swap(nums, i, j);
}
swap(nums, left, j);
return j;
}
private void qSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int m = partition(nums, left, right);
qSort(nums, left, m - 1);
qSort(nums, m + 1, right);
}
public int findKthLargest(int[] nums, int k) {
qSort(nums, 0, nums.length - 1);
return nums[k - 1];
}
}
class Solution {
private void swap(int[] nums, int i, int j) {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
private int partition(int[] nums, int l, int r) {
if (l >= r) {
return r;
}
int p = nums[l], i = l, j = r + 1;
while (i <= j) {
while (i != r && nums[++i] > p) ;
while (j != l && nums[--j] < p) ;
if (i >= j) {
break;
}
swap(nums, i, j);
}
swap(nums, l, j);
return j;
}
public int findKthLargest(int[] nums, int k) {
return sort(nums, 0, nums.length - 1, k - 1);
}
public int sort(int[] nums, int l, int r, int k) {
int j = partition(nums, l, r);
if (k == j) {
return nums[k];
} else if (k < j) {
return sort(nums, l, j - 1, k);
} else {
return sort(nums, j + 1, r, k);
}
}
}