mSrt :: Ord a => [a] -> [a] mSrt [] = [] mSrt [x] = [x] mSrt ls = mMrg (mSrt $ take hf ls) (mSrt $ drop hf ls) where hf = (length ls) `div` 2 mMrg :: Ord a => [a] -> [a] -> [a] mMrg [] ls = ls mMrg ls [] = ls mMrg l1@(e1:r1) l2@(e2:r2) | e1 > e2 = e1 : mMrg r1 l2 | otherwise = e2 : mMrg l1 r2 main=print $ mSrt [1..100]