【发布时间】:2013-02-09 09:57:43
【问题描述】:
正如他们所说,"true quicksort sorts in-place"。所以quicksort的标准short Haskell code,
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
它到底描述的是什么算法/计算过程?
肯定不是what Tony Hoare devised,它缺少其最具定义性的功能,即就地分区算法。
(答案可能是众所周知的,但还没有在这里)。
更正:这个问题实际上是重复的:答案 毕竟在 SO 上是已知的:cf。 Pseudo-quicksort time complexity.
【问题讨论】:
-
描述的是快速排序。
-
在您链接到的文章中没有证据表明 Hoare 认为它不是快速排序,除非它是就地的。
-
@AndrewC 是的,那篇文章可能不是支持我的案例的最佳选择。但是,这就是WP。我的意思是(我看到它争论了很多次)是它在原始论文中的描述 - 并且分区算法非常具体,具有交换和移动边界。根据这种观点,(不可变的)链表没有快速排序之类的东西。 (对于可变的,我们可以创建一个单元格地址数组并交换单元格内容 - (当然不是在 Haskell 中)。
-
根据the wikipedia article that you've linked中的文字描述,代码是快速排序算法的实现。
标签: algorithm haskell quicksort