27 iunie 2010

Quicksort (Haskell)

module Quick_sort where

partition p [] = ([],[])
partition p (x:rest) = if p x then (x:l,r) else (l,x:r)
where (l,r) = partition p rest
{-
sau
partition p (x:rest)
| p x = (x:l,r)
| otherwise = (l,x:r)
where (l,r)= partition p rest

-}

-- Varianta 1
qsort [] = []
qsort (x:ls) = qsort l ++ [x] ++ qsort r
where (l,r) = partition (<= x) ls

-- Varianta 2
qs [] = []
qs (x:ls) = qs l ++ [x] ++ qs r
where l = [y | y <- ls, y <= x]
r = [y | y <- ls, y > x]

-- Varianta 3
qss [] = []
qss (x:ls) = let l = [y | y <- ls, y <= x]
r = [y | y <- ls, y > x]
in qss l ++ [x] ++ qss r

Niciun comentariu: