/* 1) passing array > quicksort([4,3,2,1]); // => [1,2,3,4] */ function quicksort(tail) { if (tail.length === 0) return []; let head = tail.splice(0, 1)[0]; return quicksort(tail.filter( _ => _ <= head)) .concat([head]) .concat(quicksort(tail.filter( _ => _ > head ))) } /* 2) via arguments > quicksort(4,3,2,1); // => [1,2,3,4] or: > quicksort(...[4,3,2,1]); // => [1,2,3,4] */ function quicksort(x, ...xs) { if (arguments.length === 0) return []; return quicksort(...xs.filter( _ => _ <= x)) .concat([x]) .concat(quicksort(...xs.filter( _ => _ > x ))) }