マージソート
使い方
> 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.
参考
- 過去の30分プログラム
- id:mzp:20070421:msort