正如他们所说,"真正的快速排序是原地排序"。因此,快速排序的标准Haskell代码为:
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
它到底描述了什么算法/计算过程?
毫无疑问,它不是Tony Hoare 设计的算法,缺少其最显著的特征——原地分区算法。
(答案可能已经众所周知,但在 SO 上还没有。)
更正:事实上,这个问题是一个重复的问题:答案在SO上已经被知道了:参见Pseudo-quicksort time complexity。