Posted on 2006-08-18 22:20
chenger 閱讀(894)
評(píng)論(2) 編輯 收藏 引用 所屬分類:
Programming Stuff
現(xiàn)在每天抽一個(gè)小時(shí)看看Haskell作為調(diào)節(jié)。有個(gè)哥們將考試推到明年六月了。據(jù)說(shuō)今天考的都是超高頻題(樣本數(shù)量為3,太少……)。我那不堅(jiān)定的決心在動(dòng)搖。用福克納的話:“他們?cè)诳喟尽薄_@叫裝逼。
用Haskell寫了兩個(gè)排序算法,快速排序和合并排序。都很短,沒(méi)幾行程序,雖然效率肯定是不敢恭維的,但能用來(lái)滿足我們那自欺欺人的美感,言簡(jiǎn)意賅不是很高的境界么?不管是寫文章還是寫程序都差不多。但同時(shí)要清楚,要可讀性。說(shuō)了這么多還是看看成果吧:
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))
其實(shí)只利用了遞歸和Haskell強(qiáng)大的列表處理功能。這也不是Haskell的專利,我相信Python或Ruby或Lisp也完全能做到。