rubyでクイックソートを書いてみる。

そういえば今までrubyでは .sortをつかって知らない振りをしていたんだがrubyで書くとどうなるかやってみる。

>> def qsort(x) x.size<2?x:(y=x.shift;z=x.partition{|i|i<y};[qsort(z[0]),y,qsort(z[1])]) end
=> nil
>> qsort([3,4,5,1,1,2])
=> [[[], 1, [[], 1, [2]]], 3, [[], 4, [5]]]
>> def qsort(x) x.size<2?x:(y=x.shift;z=x.partition{|i|i<y};[qsort(z[0]),y,qsort(z[1])].flatten) end
=> nil
>> qsort([3,4,5,1,1,2])
=> [1, 1, 2, 3, 4, 5]

flattenがずるいと感じるのは、間違いなくだんだんscheme脳になってきたんじゃないかな?(笑)