quick sort
http://d.hatena.ne.jp/uskz/20080918/p2
久しぶりにHaskellのqsortを見た。
最初は
http://d.hatena.ne.jp/Nobuhisa/20070826/1188075244#c1188200644
で同じく梶本さんに教えていただいたり。(もう1年も経つのか・・・!)
当時は全く意味不明の文字列にしか見えませんでしたが、今は集合論のわずかな知識とlist comprehensionsのわずかな知識とHaskellのわずかな知識が脳に加わったので、改めて眺めてみると理解できました。
quicksort :: [Int] -> (Int->Int->Bool) -> [Int] quicksort [] f = [] quicksort (x:xs) f = quicksort [ a | a<-xs, f a x ] f ++ [ x ] ++ quicksort [ a | a<-xs, not (f a x) ] f main = do let val = [ 3, 5, 1, 7, 4, 2, 6, 8 ] let q = quicksort val print $ q (<) print $ q (>)
梶本さんのC++版で
std::vector<int> v = ovn::initial_values(1,2,3,4,5,6,7,8,9,10,11,12); std::cout << ::qsort(range_t(v));
とかやってみると凄い時間かかりそう。笑
(ソート済みの並びが一番計算量が多い)