首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Haskell中的合并排序

Haskell中的合并排序
EN

Stack Overflow用户
提问于 2009-08-01 00:08:51
回答 3查看 7.4K关注 0票数 19

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

我已经在字符串上实现了合并排序。与C和Java实现相比,我对我的Haskell实现的性能有点失望。在我的机器上(Ubuntu Linux,1.8 GHz),C (gcc 4.3.3)在1.85秒内排序1000000个字符串,Java (Java 1.6.0_14)在3.68s内排序,Haskell (GHC6.8.2)在25.89s内排序。在较大的输入(10000000个字符串)下,C花费21.81s,Java花费59.68s,Haskell开始交换,我喜欢几分钟后停止程序。

由于我是Haskell的新手,我很想知道我的实现是否可以在时间/空间上更有效。

先感谢你的任何提示,乔治

我的实现:

代码语言:javascript
复制
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)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1215432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档