编辑代码

const swap = (arr, i, j) => {
  const temp = arr[i];
  arr[i] = arr[j];
  arr[j] = temp;
};

const partition = (arr, low, high) => {
  const pivot = arr[high];
  let i = low;
  for (let j = low; j < high; j++) {
    if (arr[j] <= pivot) {
      swap(arr, i, j);
      i++;
    }
  }
  swap(arr, i, high);
  return i;
};

const quickSelect = (arr, k, low, high) => {
  if (low === high) {
    return arr[low];
  }
  const pivotIndex = partition(arr, low, high);
  console.log(arr);
  if (k === pivotIndex) {
    return arr[pivotIndex];
  } else if (k < pivotIndex) {
    return quickSelect(arr, k, low, pivotIndex - 1);
  } else {
    return quickSelect(arr, k, pivotIndex + 1, high);
  }
};

const findKthLargest = (arr, k) => {
  const kthSmallestIndex = arr.length - k-1;
  return quickSelect(arr, kthSmallestIndex, 0, arr.length - 1);
};

const arr = [11, 8, 3, 9, 7, 1, 2, 5];
const k = 4;
const result = findKthLargest(arr, k);
console.log(result); // 输出 5