Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

learning erlang

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

Name: Anonymous 2009-09-05 10:53

Way to reinvent the wheel bro
Also, why did you name drop takeM?

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List