LoginSignup
0
0

More than 5 years have passed since last update.

Haskellの真似した4行で書けるRubyのqsort

Last updated at Posted at 2018-11-06

はじめに

  • ちょっとしたお勉強程度なので,特にコードにこだわりなし
  • 基本,余計なライブラリなしの環境で実行できるプログラム
  • これがquicksortかと言われれば,まぁちょっと違うかも
  • いつか計測してみようかな...
  • コメントあれば,お願いします

Haskell

qsort.hs
# haskell
qsort :: (Ord a) => [a] -> [a]
qsort [] = []
qsort (n:ns) = 
    let left  = [a | a<-ns, a <  n]
        right = [a | a<-ns, a >= n]
    in left ++ n ++ right 

main = print $ qsort $ reverse [0..100]

Ruby

qsort.rb
# ruby
def qsort(ns)
  return [] if ns.length < 1
  left  = ns.drop(1).select { |n| n <  ns[0] }
  right = ns.drop(1).select { |n| n >= ns[0] }
  return qsort(left) + [ns[0]] + qsort(right)
end

ns = (0..100).to_a.reverse
p ns
p qsort(ns)

実際,ソートはこれなんでしょうけど

  • 配列の乱数生成も楽だし,arrayクラスさまさまですね
sort.rb
ns = (0..100).to_a.shuffle
p ns.sort
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0