diff --git a/MergeSort.hs b/MergeSort.hs new file mode 100644 index 0000000..4f51da3 --- /dev/null +++ b/MergeSort.hs @@ -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