Haskell 中的排序算法
Sorting algorithm in Haskell
我正在尝试在 Haskell 中实现一个非常简单的排序算法。它编译但总是给我不正确的输出。
这是代码
import Data.List
minimum' :: (Ord a) => [a] -> a
minimum' (x:xs) = foldr (\ x y -> if x <= y then x else y) x xs
qsrt :: (Ord a) => [a] -> [a]
qsrt [] = []
qsrt l@(x:xs) = minimum' l : qsrt xs
有什么想法吗?
逻辑错误是qsrt
取l
的最小元素然后跳过x
,但是x
只会是[=11的最小元素=] 不小心,所以你通常会跳过错误的元素。
作为 Rein Henrichs 回答的附录,我设法使用过滤器制作了上述内容的正确版本。
import Data.List
minimum' :: (Ord a) => [a] -> a
minimum' (x:xs) = foldl' (\ x y -> if x <= y then x else y) x xs
srt :: (Ord a) => [a] -> [a]
srt [] = []
srt l = ml : srt (delete ml l)
where ml = minimum' l
我正在尝试在 Haskell 中实现一个非常简单的排序算法。它编译但总是给我不正确的输出。
这是代码
import Data.List
minimum' :: (Ord a) => [a] -> a
minimum' (x:xs) = foldr (\ x y -> if x <= y then x else y) x xs
qsrt :: (Ord a) => [a] -> [a]
qsrt [] = []
qsrt l@(x:xs) = minimum' l : qsrt xs
有什么想法吗?
逻辑错误是qsrt
取l
的最小元素然后跳过x
,但是x
只会是[=11的最小元素=] 不小心,所以你通常会跳过错误的元素。
作为 Rein Henrichs 回答的附录,我设法使用过滤器制作了上述内容的正确版本。
import Data.List
minimum' :: (Ord a) => [a] -> a
minimum' (x:xs) = foldl' (\ x y -> if x <= y then x else y) x xs
srt :: (Ord a) => [a] -> [a]
srt [] = []
srt l = ml : srt (delete ml l)
where ml = minimum' l