git.fiddlerwoaroof.com
Raw Blame History
{- This is a simple merge sort -}

module Merge where
                
merge :: [Int] -> [Int] -> [Int]
merge [] x = x  
merge x [] = x
merge l1@(a:b) l2@(c:d) | a < c     = a:(merge b l2)
			| otherwise = c:(merge l1 d)

half [] = []
half [x] = [x]
half (x:y:z) = x:r where r = half z

sort [] = []
sort [x] = [x]
sort l = merge (sort odds) (sort evens) where
	     odds = half l
	     evens = half (tail l)

main =
  appendChan stdout "Enter a list of integers separated by \",\"\n" abort $
  readChan stdin abort $ \ input ->
  appendChan stdout 
      (show (sort (read ("[" ++ (head (lines input)) ++ "]"))))
      abort done