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:
Trimiteți un comentariu