在 Haskell website ,有这个例子quicksort implementation :
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
网站上有一个解释,但我有几个我没有看到的问题得到解决......
最佳答案
lesser
时完成。和 greater
被创建,带有 <
, >=
— Ord
是限制 a
的类型类可订购——如果不使用,您将无法使用 <
或 >=
. xs
的一部分— 模式匹配将输入列表拆分为 p
和 xs
. 这是糟糕的 ASCII 可视化:
qs [5, 5, 6, 3, 1]
|
qs [3, 1] ++ [5] ++ qs [5, 6]
| | |
qs [1] ++ [3] ++ qs [] | qs [] ++ [5] ++ qs [6]
| | |
[1, 3] ++ [5] ++ [5, 6]
\ | /
\-------------------/
|
[1, 3, 5, 5, 6]
关于haskell - Haskell 中的快速排序如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167910/