What else can you do in a dull Saturday evening 😉
-module (sorting). -compile (export_all). merge_sort([]) -> []; merge_sort(L) -> {L1 , L2} = split(L), merge(merge_sort(L1),merge_sort(L2)). merge(X , Y) -> merge(X,Y,[]). merge([], [] , X) -> X; merge([] , S2, X) -> X ++ S2; merge(S1 , [], X) -> X ++ S1; merge([H1 | T1] , [H2 | T2], X) when H1 >= H2 -> merge( [H1 | T1] , T2 , append(X,[H2])); %tail recursion merge([H1 | T1] , [H2 | T2], X) -> merge( T1 , [H2 | T2], append(X,[H1])). %tail recursion append(X , Y) -> X ++ Y. % appending two list ! how cool! split(L) -> split(L , {[] , []}). split([] , {X , Y}) -> { X , Y }; split([H|T] , {X , Y}) -> split( T , { Y , append(X , [H]) }). %tail recursion