Skip to content

Instantly share code, notes, and snippets.

@hjpbarcelos
Created March 12, 2013 20:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hjpbarcelos/5146603 to your computer and use it in GitHub Desktop.
Save hjpbarcelos/5146603 to your computer and use it in GitHub Desktop.
Erlang sorting
-module(sorting).
-export([mergesort/1, quicksort/1]).
merge([], L) -> L;
merge(L, []) -> L;
merge(L1=[H1|T1], L2=[H2|T2]) ->
if
H1 =< H2 -> [H1 | merge(T1, L2)];
true -> [H2 | merge(L1,T2)]
end.
mergesort([]) -> [];
mergesort([H]) -> [H];
mergesort(List) when is_list(List) ->
{L1,L2} = lists:split(length(List) div 2, List),
merge(mergesort(L1), mergesort(L2)).
% ------------------------------------------------- %
partition([]) -> {[], [], []};
partition([H]) ->
{[H], [], []};
partition([Pivot|T]) ->
Less = [ X || X <- T, X =< Pivot],
Greater = [ X || X <- T, X > Pivot],
{Less, [Pivot], Greater}.
quicksort([]) -> [];
quicksort([H]) -> [H];
quicksort(List) when is_list(List) ->
{L1, [Pivot], L2} = partition(List),
quicksort(L1) ++ [Pivot] ++ quicksort(L2).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment