Name: Anonymous 2012-04-24 5:29
Haskell newbie here, how is my mergesort?
merge :: (Ord a) => [a] -> [a] -> [a]
merge [] ys = ys
merge xs [] = xs
merge (x:xs) (y:ys) = if (x < y) then x:(merge xs (y:ys)) else y:(merge (x:xs) ys)
mergeSort :: (Ord a) => [a] -> [a]
mergeSort [] = []
mergeSort [x] = [x]
mergeSort xs = let mid = (length xs) `div` 2
parts = (splitAt mid xs)
left = mergeSort (fst parts)
right = mergeSort (snd parts)
in merge left right