快排。模板套路就行了。

function GetLeastNumbers_Solution(input, k)
{
  // 异常数据
  if (k > input.length || k <= 0) return [];
  return quickSearch(input, 0, input.length - 1, k - 1);
}

function quickSearch(a, low, high, k) {
  let p = part(a, low, high);
  if (p === k) {
    // 这里主要考虑到面试官可能限制使用本身的sort函数
    return part(a.slice(0, k + 1), 0, k, true);
  }
  return p > k ? quickSearch(a, low, p - 1, k) : quickSearch(a, p + 1, high, k);
}

// findRes 是为了能复用函数
function part(a, low, high, findRes = false) {
  if (low >= high && findRes) return a;
  let p = a[low];
  let i = low;
  let j = high + 1;
  while (true) {
    while (++i <= high && a[i] < p) ;
    while (--j >= low && a[j] > p) ;
    if (i >= j) break;
    let temp = a[i];
    a[i] = a[j];
    a[j] = temp;
  }
  a[low] = a[j];
  a[j] = p;
  if (findRes) {
    part(a, low, j - 1, findRes);
    part(a, j + 1, high, findRes);
    return a;
  }
  return j;
}

module.exports = {
    GetLeastNumbers_Solution : GetLeastNumbers_Solution
};