相关疑难解决方法(0)

在Haskell中合并排序

我是Haskell的新手,我正在尝试在其中实现一些已知的算法.

我已经对字符串实现了合并排序.与C和Java实现相比,我对Haskell实现的性能有点失望.在我的机器上(Ubuntu Linux,1.8 GHz),C(gcc 4.3.3)在1.85秒内对1 000 000个字符串进行排序,在3.68秒内对Java(Java SE 1.6.0_14),在2.89秒内对Haskell(GHC 6.8.2)进行排序.使用更大的输入(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 …
Run Code Online (Sandbox Code Playgroud)

performance mergesort haskell

19
推荐指数
4
解决办法
6595
查看次数

标签 统计

haskell ×1

mergesort ×1

performance ×1