Skip to content

Instantly share code, notes, and snippets.

@apaleslimghost
Forked from kangax/quicksort.hs
Created October 6, 2015 07:51
Show Gist options
  • Save apaleslimghost/e55ee43667a42f3e8cdc to your computer and use it in GitHub Desktop.
Save apaleslimghost/e55ee43667a42f3e8cdc to your computer and use it in GitHub Desktop.
Haskell-inspired quick sort in ES6
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort (filter (<=x) xs)
biggerSorted = quicksort (filter (>x) xs)
in smallerSorted ++ [x] ++ biggerSorted
/*
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 )))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment