You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按身高升序对(String, Int)类型的Horse二元组列表快速排序?

Haskell按马匹身高升序快速排序的正确实现

你的代码问题在于缺少quick_sort函数的实现,且参数传递方式不符合Haskell的语法要求。以下是两种可行的实现方案:

方案一:手动实现通用快速排序

先定义一个通用的快速排序函数,接收比较逻辑和待排序列表,再针对马匹身高的排序需求调用该函数:

type Horse = (String, Int)

-- 通用快速排序:参数为比较函数、待排序列表
quickSort :: (a -> a -> Bool) -> [a] -> [a]
quickSort _ [] = []  -- 空列表直接返回
quickSort cmp (pivot:rest) =
    -- 拆分列表:小于等于基准的元素、大于基准的元素
    let smallerOrEqual = filter (\x -> cmp x pivot) rest
        larger = filter (\x -> not (cmp x pivot)) rest
    -- 递归排序后拼接结果
    in quickSort cmp smallerOrEqual ++ [pivot] ++ quickSort cmp larger

-- 按马匹身高升序排序的专用函数
sortHorseList :: [Horse] -> [Horse]
sortHorseList = quickSort (\h1 h2 -> snd h1 <= snd h2)

测试示例:

-- 输入
sortHorseList [("Thunder",125),("Lightning",115),("Bolt",135)]
-- 输出
[("Lightning",115),("Thunder",125),("Bolt",135)]

方案二:使用Haskell标准库(更简洁高效)

Haskell标准库提供了sortBy函数,结合comparing可以快速实现基于特定字段的排序,无需手动编写快速排序逻辑:

import Data.List (sortBy)
import Data.Ord (comparing)

type Horse = (String, Int)

sortHorseList :: [Horse] -> [Horse]
sortHorseList = sortBy (comparing snd)

这个方案的优势在于标准库的排序函数经过优化,在性能和边界情况(如空列表、重复身高的马匹)处理上更可靠。

内容的提问来源于stack exchange,提问作者Thomas Butler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:40:24