Insersion Sort

30分プログラム、その715。2009-11-30 - Haskellで遊ぶよ - haskellにインスパイアされました。
書いてから上記のページを見てみたんけど、http://haskell.org/ghc/docs/latest/html/libraries/base-4.2.0.0/Data-List.htmlのinsertやinsertByがあったのか。こっちを使えばよかったなぁ。
あと、昔の記事をあさったたら、2年ほど前に書いたinsersion sortがでてきました(ソートをいろいろ - みずぴー日記)。こっちは、foldrじゃなくてfoldlを使ってますね。foldrのほうが遅延評価と相性がいいとか、なんとか。

使い方

*Main> isort [3,4,5,3,2,1,4]
[1,2,3,3,4,4,5]

ソースコード

insert :: Ord a => a -> [a] -> [a]
isort  :: Ord a => [a] -> [a]

insert x [] = [x]
insert x yss@(y:ys) = if x < y then
                          x:yss
                      else
                          y:insert x ys

isort = foldr insert []