function swap(arr, i, j) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
function findPivot(arr, start, end) {
const len = end - start
let mid = start + (len >> 1)
let min = start
let max = end - 1
if (arr[min] > arr[mid]) {
let temp = min
min = mid;
mid = temp
}
if (arr[mid] > arr[max]) {
let temp = mid
mid = max
max = temp
}
if (arr[min] > arr[mid]) {
let temp = min
min = mid
mid = temp
}
return mid
}
function partition(arr, left, right) {
let i = left,
j = right;
let mid = findPivot(
arr,
left,
right
);
swap(arr, left, mid);
while (i < j) {
while (i < j && arr[j] >= arr[left]) {
j -= 1;
}
while (i < j && arr[i] <= arr[left]) {
i += 1;
}
swap(arr, i, j);
}
swap(arr, i, left);
return i;
}
const findKthLargest = (arr, k) => {
const len = arr.length
function quickSort(left, right) {
if (left > right) return;
const pivotIndex = partition(arr, left, right);
if (len - k < pivotIndex) {
quickSort(left, pivotIndex - 1);
} else {
quickSort(pivotIndex + 1, right);
}
}
quickSort(0, len - 1)
return arr[len - k]
}
const arr = [9, 8, 7, 6, 5, 4, 2, 1]
const arr2 = [9, 8, 5, 4, 2, 1, 7, 6]
const arr3 = [2, 1, 9, 8, 5, 4, 7, 6]
console.log(findKthLargest(arr, 1))
console.log(findKthLargest(arr2, 2))
console.log(findKthLargest(arr3, 3))
console.log(findKthLargest(arr2, 4))
console.log(findKthLargest(arr3, 5))