Este algoritmo segue uma estratégia chamada de “divisão e conquista”.
qsort :: (Ord a) => [a] -> [a]
qsort [] = []
qsort (x:xs) = (qsort l1) ++ [x] ++ (qsort l2)
where (l1,l2) = parte x xs
A função parte pode ser feita usando a técnica de tupling
parte :: (Ord a) => a -> [a] -> ([a],[a])
parte x [] = ([],[])
parte x (y:ys) | y < x = (y:l1, l2)
| otherwise = (l1, y:l2)
where (l1,l2) = parte x ys
Atalhos :