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

有什么想法吗?

逻辑错误是qsrtl的最小元素然后跳过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