Add merge sort

This commit is contained in:
joachimschmidt557 2020-01-19 15:05:01 +01:00
parent 90c5785d68
commit 7d01b3463d

20
MergeSort.hs Normal file
View file

@ -0,0 +1,20 @@
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