qsort :: Ord a => [a] -> [a] qsort [] = [] qsort [x] = [x] qsort (p:xs) = qsort lesser ++ [p] ++ qsort greater where (lesser, greater) = foldl split ([],[]) xs where split (left, right) x = if x<p then (left:x, right), else (left, right:x)
split (left, right) x = if x<p then (x:left, right), else (left, x:right)