目前我有
type Example = (String,Int)
qsort:: [Example]->[Example]
qsort [] = []
qsort (x:xs) = qsort [y|y<-xs,y<=x] [x] qsort[y|y<-xs,y>x]
但這會根據元組的第一個元素執行快速排序:
qsort [("Alfie",55),("Scott",12),("Harry",82)] returns,
[("Alfie",55),("Harry",82),("Scott",12)]
uj5u.com熱心網友回復:
type Example = (String, Int)
merge :: [Example] -> [Example] -> [Example]
merge xs [] = xs
merge [] ys = ys
merge (x@(_,a):xs) (y@(_,b):ys) | a <= b = x:merge xs (y:ys)
| otherwise = y:merge (x:xs) ys
msort :: [Example] -> [Example]
msort [] = []
msort [x] = [x]
msort xs = merge (msort (firstHalf xs)) (msort (secondHalf xs))
firstHalf xs = let { n = length xs } in take (div n 2) xs
secondHalf xs = let { n = length xs } in drop (div n 2) xs
這是針對Example資料型別的自定義合并排序,并基于元組的第二個元素進行排序。
merge只是合并Examples 的2 個排序串列,查看元組中的第二個元素,a并且b.
firstHalf和secondHalf是除法函式。
msort是無所不包的功能,夫妻firstHalf和secondHalf有merge。
簡短測驗:
λ> msort [("Alfie",55),("Scott",12),("Harry",82)]
[("Scott",12),("Alfie",55),("Harry",82)]
積分:這是源我從抬頭Haskell的合并排序的實作。
uj5u.com熱心網友回復:
您可以解壓 2 ??元組并過濾 2 元組第二項的值,例如:
sort_list :: [Example]->[Example]
sort_list [] = []
sort_list (x@(_, a):xs) = sort_dog_list [y|y@(_,ay) <-xs, … ] x : sort_list[y|y@(_, ay) <- xs, … ]
我把填寫…部分作為練習。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374167.html
標籤:哈斯克尔
下一篇:緩慢檢查正確的輸入
