Haskellのお勉強 ソート
Haskellでソートを書く
ソートと言ってもIO絡まないのですぐできた
sort
import Data.List main = do contents <- getContents putStr $ unlines $ sort $ lines contents
reverse
import Data.List main = do contents <- getContents putStr $ unlines $ reverse $ lines contents
あら、簡単、終わり
ちょっと簡単にできたので自分でソートアルゴリズムを組んでみることにした
お題はバブルソート
とりあえず要素の交換はできないので配列中から最小の要素を見つけて左再帰する
最小の要素を見つけんのに配列の先頭2要素見て比較して、ぐちゃぐちゃ・・・
思ったより時間かかって2時間かかって多分できた
bubble_sort
main = do contents <- getContents putStr $ unlines $ bubble_sort $ lines contents bubble_sort :: (Ord a) => [a] -> [a] bubble_sort [] = [] bubble_sort xs = y:bubble_sort ys where y:ys = head_min xs head_min :: (Ord a) => [a] -> [a] head_min [] = [] head_min [x] = [x] head_min (a1:a2:as) | a1 > a2 = head_min (a2:as) ++ [a1] | otherwise = head_min (a1:as) ++ [a2]
head_min (a2:as) ++ [a1]の部分が
(head_min a2:as):a1 これでも
head_min (a2:as):a1 これでもダメ、優先順位がよく分からない
明日のお題はwc、expr
明後日のお題はcsv読み書き