Kawaii Lab

プログラミングとかサービス開発とか

Rubyでバブルソートを実装してみた

バブルソートとは

全ての要素に対してて隣接する値同士を比較し入れ替えていくソート法である。 総数をnとして n(n-1)/2 の繰り返しを行います。

  • 最初の周回で最後尾の要素が決定する
  • 次の周回では決まった要素を除いた要素たちで周回を行えばいい(/2)
  • 最後から二番目の要素が確定した時点で最後の要素が確定する (n-1)

というロジックであるらしい

Rubyの繰り返しについて

Rubyには繰り返しのメソッドがいくつかあって迷った。

  • Intの指定回数を繰り返すtimes
  • オブジェクトの要素分だけ繰り返すfor
  • 配列の要素分だけ繰り返すeach

今回はtimesを使ってしまったが、forで全部できそうなのでこいつだけでいいんじゃないかな?

実装してみた

class Sort
    def initialize
    end

    def bublle
        targets = [2,1,3,2,5]
        first_loop = targets.length - 1

        first_loop.times do |i|
            next_loop = first_loop - i

            next_loop.times do |j|
                if targets[j] > targets[j + 1]
                    next_than_bigger = targets[j]
                    targets[j] = targets[j+1]
                    targets[j+1] = next_than_bigger
                end
            end
        end

        p targets
    end
end


sort = Sort.new
sort.bublle

出力結果

ruby Ruby/Sort.rb
[1, 2, 2, 3, 5]