Rubyでbucket sort
最近Rubyの勉強を始めたので,比較的実装が容易なbucket sortを実装してみました.
bucket sortとは
バケットソート(ビンソート [Bin Sort] とも呼ばれる)はあらかじめデータがとりうる値すべての容器(バケット)を順番どおりに並べて用意しておき、値を対応する容器に移すことでソートを行う整列アルゴリズムです。
データがとりうる値がわかっていなければソートのためのバケット [Bucket] を準備することができないのでこのアルゴリズムは使えません。比較を用いない整列アルゴリズムです。
取り組んだ理由としては,授業で出てきたソートなので,アルゴリズムとRubyの文法理解につなげたいと思ったからです(^^)
コード
MIN_BUKET = 0 MAX_BUKET = 10 def bucket_sort() #テストデータ生成 list = 5.times.map{rand(MAX_BUKET)} puts "テストデータ" p list #バケットの準備 bucket_list = Array.new(MAX_BUKET) #対応付くデータに格納 list.length.times do |i| bucket_list[list[i]] = list[i] end puts "バケットの中身" p bucket_list #パケットから取り出し x = 0 list = [] MAX_BUKET.times do |j| unless bucket_list[j].nil? then list[x] = bucket_list[j] x += 1 end end puts "ソート結果" p list end bucket_sort
実行結果
テストデータ [5, 1, 1, 4, 1] バケットの中身 [nil, 1, nil, nil, 4, 5, nil, nil, nil, nil] ソート結果 [1, 4, 5]
割と時間かかってしまいました笑
Ruby的な書き方がよくわかってない←
リファレンスみながらポチポチしてましたが,Arrayクラス強すぎィってのが感想でした(ほとんど使ってない).あといろんな繰り返し文があって凄いなあ〜