パンうめぇ

園児ニアの日記帳

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クラス強すぎィってのが感想でした(ほとんど使ってない).あといろんな繰り返し文があって凄いなあ〜

アプリケーション開発でRailsも触る予定なので,これからバンバンRuby書いていきたいです.