快速排序
void QuickSort(int R[], int lo, int hi){
int i = lo, j = hi;
int temp;
if(i < j){
temp = R[i];
while (i != j)
{
while(j > i && R[j] > temp)-- j;
R[i] = R[j];
while(i < j && R[i] < temp)++ i;
R[j] = R[i];
}
R[i] = temp;
QuickSort(R, lo, i - 1);
QuickSort(R, i + 1, hi);
}
}/**
* @param {number[]} arr
* @param {number} k
* @return {number[]}
*/
var getLeastNumbers = function(arr, k) {
if (k === 0) {
return [];
}
if (arr.length <= k) {
return arr;
}
quickSort(arr, 0, arr.length-1, k-1);
return arr.slice(0, k);
};
function quickSort(arr, left, right, target) {
const mid = partition(arr, left, right);
if (mid === target) {
return;
}
mid > target ? quickSort(arr, left, mid-1, target) : quickSort(arr, mid+1, right, target);
}
function partition(arr, left, right) {
const flag = arr[right];
let i = left-1;
for (let j = left; j < right; j++) {
if (arr[j] <= flag) {
swap(arr, ++i, j);
}
}
swap(arr, ++i, right);
return i;
}
function swap(arr, i, j) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}最后更新于