現在每天抽一個小時看看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也完全能做到。