Я новичок в Haskell и пытаюсь реализовать в нем несколько известных алгоритмов.
Я реализовал сортировку слиянием в строках. Я немного разочарован
производительность моей реализации на Haskell по сравнению с реализациями на C и Java.
На моей машине (Ubuntu Linux, 1,8 ГГц) 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, мне было бы интересно узнать, может ли моя реализация
быть более экономным по времени / пространству.
Заранее благодарю за любую подсказку
Giorgio
Моя реализация:
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)