說得快速排序,基本是常用的排序當中速度最快的排序了,之前也用C和Java實現過,但是過程十分痛苦,更重要的是寫完代碼只記得過程卻對實質的過程覺得隔了一層紗,有種說不出的感覺。剛剛看一下Haskell實現的快排,頓時感覺驚為天人,他喵的,這才是人應該寫的代碼,簡單而又優雅,真是太棒了
1 quickSort :: (Ord a)=>[a]->[a] 2 quickSort [] =[] 3 quickSort (x:xs)= 4 let smaller=[a|a<-xs,a<=x] 5 bigger=[a|a<-xs,a>x] 6 in quickSort smaller ++[x]++quickSort bigger
測試代碼:
1 main :: IO () 2 main = 3 print( show (quickSort(take 100 (cycle [3,2,1]))))
輸出:
"[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]"