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]