我正在尝试排序' HOHOHOO !!!'在Haskell中使用任何非比较整数排序算法,以便最终得到' !!! HHHOOOO' ..
我只和Haskell串在一起并且整天坐在它上面...请帮助!
到目前为止我得到的只是这个,但它不允许对信件进行排序。我想我需要使用Radix排序,但我不知道如何。
merge [] l = l
merge l [] = l
merge l1@(x1:r1) l2@(x2:r2) =
if x1 < x2 then x1:(merge r1 l2) else x2:(merge l1 r2)
ssort [] = []
ssort l = merge strand (ssort rest)
where (strand, rest) = foldr extend ([],[]) l
extend x ([],r) = ([x],r)
extend x (s:ss,r) = if x <= s then (x:s:ss,r) else (s:ss,x:r)
谢谢你, 大沙
答案 0 :(得分:4)
在Haskell中,计数排序是非比较性的,非常简单(单行!):
import Data.Array
countingSort :: (Bounded a, Ix a, Num i) => [a] -> Array a i
countingSort = accumArray (+) 0 (minBound, maxBound) . flip zip (repeat 1)
基数排序可以使用类似的技术实现,使用数据结构来实现基数查找。有关排序Int
的信息,请参阅IntMap,或浏览可处理其他类型数据的接口的许多memoization包。