Haskell は初めてで、いくつかの既知のアルゴリズムを実装しようとしています。
文字列にマージソートを実装しました。C および Java の実装と比較して、私の Haskell 実装のパフォーマンスには少しがっかりしています。私のマシン (Ubuntu Linux、1.8 GHz) では、C (gcc 4.3.3) は 1 000 000 文字列を 1.85 秒、Java (Java SE 1.6.0_14) は 3.68 秒、Haskell (GHC 6.8.2) は 25.89 秒でソートします。より大きな入力 (10 000 000 文字列) では、C は 21.81 秒、Java は 59.68 秒かかり、Haskell はスワッピングを開始し、数分後にプログラムを停止することを好みました。
私は Haskell を初めて使用するので、実装をより時間/スペース効率的にできるかどうか知りたいです。
ヒントを事前にありがとうジョルジオ
私の実装:
merge :: [String] -> [String] -> [String]
merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys) = if x < y
then x : (merge xs (y:ys))
else y : (merge (x:xs) ys)
mergeSort :: [String] -> [String]
mergeSort xs = if (l < 2)
then xs
else merge h t
where l = length xs
n = l `div` 2
s = splitAt n xs
h = mergeSort (fst s)
t = mergeSort (snd s)