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読み書き