SOE ex.12.3


quicksort :: Ord a => [a] -> [a]
quicksort [] = []

{-
quicksort (x:xs) = quicksort [n | n <- xs, n < x]   ++ 
                   [x]                              ++ 
                   quicksort [n | n <- xs, n >= x]
-}

quicksort (x:xs) = quicksort lesser ++ x : quicksort greater
  where
  part l g [] = (l, g)
  part l g (n:ns) = if n < x then part (n:l) g ns else part l (n:g) ns
  (lesser, greater) = part [] [] xs


-- qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)


-- import Data.List
-- qsort (x:xs) = qsort less ++ [x] ++ qsort more
--   where (less, more) = partition (<x) xs


-- http://en.wikipedia.org/wiki/Quicksort
-- http://www.haskell.org/haskellwiki/Introduction 
-- http://en.literateprograms.org/Quicksort_(Haskell)

Leave a Reply