Haskellで蟻本を解く1

最近Haskellを勉強していて、練習がてら、蟻本こと「プログラミングコンテストチャレンジブック」の問題をできるだけ解いてみようと思います。
最初は練習問題の

n本の棒から周長が最大となる三角形を作る

という問題。これをO(nlogn)で解くにはどうしたらいいかというものです。(しらみつぶしでO(n^3)の方法については本に書いてあります)

qsort :: [Int] -> [Int]
qsort [] = []
qsort (x:xs) =
  qsort [x' | x' <- xs, x'>x] ++ [x] ++ qsort [x' | x' <- xs, x'<=x]

maxTriangleSorted :: [Int] -> [Int]
maxTriangleSorted (x:xs)
  | length xs <	2 = []
  | x <	sum xss = [x] ++ xss
  | otherwise = maxTriangleSorted xs
                where xss = take 2 xs

maxTriangle :: [Int] ->	[Int]
maxTriangle = maxTriangleSorted.qsort
maxTriangle [15,2,7,3,8,6]
[8,7,6]

qsortはO(nlogn)で比較は高々n回なので計算時間はO(nlogn)です。
あまりHaskell的にはよろしくないコードだと思いますが…。

プログラミングコンテストチャレンジブック

プログラミングコンテストチャレンジブック