利用快速排序分割序列的思路,不斷分割陣列即可
function devide(a, l, r, k)
{
if(r - l + 1 == k) return a.slice(l, r + 1);
let pivot = a[l];
let i = l;
let j = r;
while(i < j){
while(i < j && a[j] > pivot) j--;
if(i < j){
a[i] = a[j];
i++;
}
while(i < j && a[i] < pivot) i++;
if(i < j){
a[j] = a[i];
j--;
}
}
a[i] = pivot;
if(i - l + 1 === k){
return a.slice(l, i + 1);
}else if(i - l + 1 > k){
return devide(a, l, i - 1, k);
}else{
return a.slice(l, i + 1).concat(devide(a, i + 1, r, k - (i - l + 1)));
}
}
let a = [1, -1, 3, 7, 0, 10];
console.log(devide(a, 0, a.length - 1, 1));
本作品採用《CC 協議》,轉載必須註明作者和本文連結