Posted on 2006-08-18 22:20
chenger 阅读(889)
评论(2) 编辑 收藏 引用 所属分类:
Programming Stuff
现在每天抽一个小时看看Haskell作为调节。有个哥们将考试推到明年六月了。据说今天考的都是超高频题(样本数量为3,太少……)。我那不坚定的决心在动摇。用福克纳的话:“他们在苦熬”。这叫装逼。
用Haskell写了两个排序算法,快速排序和合并排序。都很短,没几行程序,虽然效率肯定是不敢恭维的,但能用来满足我们那自欺欺人的美感,言简意赅不是很高的境界么?不管是写文章还是写程序都差不多。但同时要清楚,要可读性。说了这么多还是看看成果吧:
module Sort where
-- Quick Sort Algorithm
quicksort [] = []
quicksort (x:xs) =
quicksort [y | y <- xs,y <= x]
++ [x] ++
quicksort [y | y <- xs,y > x]
-- Merge two ordered sequences
merge' [] [] = []
merge' lst [] = lst
merge' [] lst = lst
merge' (x1:xs1) (x2:xs2) =
if x1 < x2
then x1:(merge' xs1 (x2:xs2))
else x2:(merge' (x1:xs1) xs2)
-- Merge Sort Algorithm
mergesort [] = []
mergesort (x:[]) = [x]
mergesort lst =
let parts = splitAt (div (length lst) 2) lst
in merge' (mergesort (fst parts))
(mergesort (snd parts))
其实只利用了递归和Haskell强大的列表处理功能。这也不是Haskell的专利,我相信Python或Ruby或Lisp也完全能做到。