マージソート

30分プログラム、その119。Erlangマージソート

使い方

> msort:msort([13,3,2]).
[2,3,13]

ソースコード

シーケンシャルなのでErlangである意味はあまりない気がしてる。

-module(msort).
-compile(export_all).

merge(A,[]) ->
    A;
merge([],B) ->
    B;
merge([X|Xs],[Y|Ys]) ->
    if 
	X < Y -> [X|merge(Xs,[Y|Ys])];
	true -> [Y|merge([X|Xs],Ys)]
    end.

msort([]) -> [];
msort([X]) -> [X];
msort(L) -> begin
		N = length(L) div 2,
		{X,Y} = lists:split(N,L),
		merge(msort(X),msort(Y))
	    end.

参考