Comment detail

比較しないソートの作成 (Nested Flatten)
クイックソート的にやりました。 しかし、終了条件が悪いので遅いです。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import Data.List (group,sort)

main :: IO ()
main = print $ qsort (-1) 10 [-1,9,4,8,9,6,3,9,5,2]

uniq :: Ord a => [a] -> [a]
uniq ns = map head $ group $ sort ns

qsort :: Integral a => a -> a -> [a] -> [a]
qsort _ _ [] = []
qsort _ _ ns | length (uniq ns) == 1 = ns
qsort min max ns = let mid = div (max + min) 2
                   in qsort min mid [y | y <- ns, y < mid] ++ qsort mid max [y | y <- ns, y >=mid ]

uniq の中で sort を使ってしまっていますよ。(^_^;)

以下のリスト内包表記内でも比較が使われていますね。

1
[y | y <- ns, y < mid] ++ qsort mid max [y | y <- ns, y >=mid ]
問題文に
「最大値や最低値を元に算出した数値との比較は使用しても問題ありません。」
とあるのでその比較は問題ないんじゃないでしょうか。

Index

Feed

Other

Link

Pathtraq

loading...