【发布时间】:2013-03-19 03:46:18
【问题描述】:
我正在尝试实施冒泡排序来按优先级对列表进行排序。例如,列表具有以下格式,第 3 个元素为优先级:
[("Ted", 100, 3), ("Boris", 100, 1), ("Sam", 100, 2)]
我尝试了下面的标准冒泡排序方法,但是这不起作用。任何建议,将不胜感激。
bubbleSort :: (Ord t) => [t] -> [t]
bubbleSort a = loop (length a) bubble a
bubble :: (Ord t) => [t] -> [t]
bubble (a:b:c) | a < b = a : bubble (b:c)
| otherwise = b : bubble (a:c)
bubble (a:[]) = [a]
bubble [] = []
loop :: (Num a, Ord a) => a -> (t -> t) -> t -> t
loop num f x | num > 0 = loop (num-1) f x'
| otherwise = x
where x' = f x
【问题讨论】:
-
您的函数对整个元组进行排序,因此如果您希望它对元组的第三个元素进行排序,则需要修改一些内容。顺便说一句,永远不要使用冒泡排序。
-
@augustss 我可以在冒泡排序上使用什么?插入排序?为什么我不应该使用冒泡排序?
-
只是冒泡排序效率极低。
-
@user2214957,因为它很慢。顺便说一句,如果这不仅仅是一个实验,看看你是否可以实现排序算法,你可能想看看
Data.List.sortBy -
@luqui 老实说,我只是将其用作学习曲线。在这个阶段它并不意味着高效。
标签: haskell bubble-sort