Name: I am learning erlang 2009-09-04 23:23
-module(merge).
-compile(export_all).
-import(lists.filter).
qsort([]) -> [];
qsort([Head | Tail]) ->
Pivot = Head,
qsort(lists:filter(fun(X) -> X < Pivot end, Tail)) ++ [Pivot] ++ qsort(lists:filter(fun(X) -> X > Pivot end, Tail)).
length([], Total) -> Total;
length([_ | Tail], Total) ->
length(Tail, Total + 1).
length(List) ->
length(List, 0).
%% take takes the first N elements
takeT([], _) -> [];
takeT(_, 0) -> [];
takeT([Head | Tail], N) ->
[Head | takeT(Tail, N - 1)].
%% takeM takes every element after N and returns the list of elements after the Nth index
takeM([], _) -> [];
takeM([Head | Tail], N) ->
if
N > 0 -> takeM(Tail, N - 1);
N == 0 -> [Head | takeM(Tail, N)];
true -> []
end.
merge([]) -> [];
merge([Head]) -> [Head];
merge([Head | Tail]) ->
Left = qsort(takeT([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
Right = qsort(takeM([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
Left ++ Right.
lol merge quicksort
-compile(export_all).
-import(lists.filter).
qsort([]) -> [];
qsort([Head | Tail]) ->
Pivot = Head,
qsort(lists:filter(fun(X) -> X < Pivot end, Tail)) ++ [Pivot] ++ qsort(lists:filter(fun(X) -> X > Pivot end, Tail)).
length([], Total) -> Total;
length([_ | Tail], Total) ->
length(Tail, Total + 1).
length(List) ->
length(List, 0).
%% take takes the first N elements
takeT([], _) -> [];
takeT(_, 0) -> [];
takeT([Head | Tail], N) ->
[Head | takeT(Tail, N - 1)].
%% takeM takes every element after N and returns the list of elements after the Nth index
takeM([], _) -> [];
takeM([Head | Tail], N) ->
if
N > 0 -> takeM(Tail, N - 1);
N == 0 -> [Head | takeM(Tail, N)];
true -> []
end.
merge([]) -> [];
merge([Head]) -> [Head];
merge([Head | Tail]) ->
Left = qsort(takeT([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
Right = qsort(takeM([Head | Tail], erlang:trunc(merge:length([Head | Tail])/2))),
Left ++ Right.
lol merge quicksort