haskell-random/MergeSort.hs
joachimschmidt557 7d01b3463d Add merge sort
2020-01-19 15:05:01 +01:00

20 lines
445 B
Haskell

merge :: [Integer] -> [Integer] -> [Integer]
merge [] lst = lst
merge lst [] = lst
merge (h1:t1) (h2:t2) = if h1 < h2 then
[h1] ++ merge t1 (h2:t2)
else
[h2] ++ merge (h1:t1) t2
sort :: [Integer] -> [Integer]
sort [] = []
sort [x] = [x]
sort lst = let
mid = div (length lst) 2
(left, right) = splitAt mid lst
in merge (sort left) (sort right)
main :: IO ()
main = let
lst = [10, 42, 2, 23, 666, 1, -94, 52]
in print $ sort lst