Bohtvaroh

Merge sort in Haskell

Mar 30th, 2012
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sort :: (Ord a) => [a] -> [a]
  2. sort [] = []
  3. sort xs = head . mergesort . split $ xs
  4.  
  5. split :: [a] -> [[a]]
  6. split = map (:[])
  7.  
  8. mergesort :: (Ord a) => [[a]] -> [[a]]
  9. mergesort []           = []
  10. mergesort [x]          = [x]
  11. mergesort (xs:ys:rest) = mergesort $ merge xs ys : mergesort rest
  12.  
  13. merge :: (Ord a) => [a] -> [a] -> [a]
  14. merge xs []                      = xs
  15. merge [] xs                      = xs
  16. merge first@(x:xs) second@(y:ys) = if x < y then x : merge xs second
  17.                                    else y : merge first ys
Advertisement
Add Comment
Please, Sign In to add comment