quicksort [] = [] quicksort (x:xs) = (quicksort less) ++ [x] ++ (quicksort greater) where (less,greater) = (partition xs x) partition [] piv = ([],[]) partition (x:xs) piv | x < piv = ((x:lessxs),greaterxs) | otherwise = (lessxs,(x:greaterxs)) where (lessxs,greaterxs) = (partition xs piv) qs([]) -> []; qs([X| Xs]) -> {Less , Greater } = partition (Xs,X), qs( Less ) ++ [X] ++ qs( Greater ). partition ([],Piv ) -> {[],[]} ; partition ([X| Xs],Piv) -> {Less,Greater} = partition (Xs, X), if X < Piv -> {[X|Less],Greater} ; true -> {Less,[X|Greater]} end .