updated on 2019-09-27
バブルソート (bubble sort) は、ソートのアルゴリズムの一つ。隣り合う要素の大小を比較しながら整列させること。最悪計算時間がO(n2)と遅いが、アルゴリズムが単純で実装が容易なため、また並列処理との親和性が高いことから、しばしば用いられる。安定な内部ソート。基本交換法、隣接交換法ともいう。(単に交換法と言う場合もある)[wikipedea引用]
1. 先頭から順に見ていって、左右の並びがおかしいところがあれば、入れ替える。
2. 最後までたどり着いたら再び先頭に戻って、同じように見ていく。
3. 1度も並び替えをすることなく先頭から最後まで見終わったら完了。
class BubbleSort def initialize(array) @target = array end def sort flag = nil # flagがtrueである間,左右の比較交換を繰り返す begin flag = false (@target.size - 1).times do |i| if @target[i] > @target[i + 1] flag = true j = @target[i] @target[i] =@target[i + 1] @target[i + 1] = j end end end while(flag) end end # ---------- Main if __FILE__ == $0 N = 10 puts "乱数を生成します" array = Array.new(N) array.each_index do |i| array[i] = rand(1000) end p array s = BubbleSort.new(array) puts "並び替え開始" s.sort puts "終了" p array end
<実行結果>
乱数を生成します
[590, 441, 544, 452, 867, 362, 593, 11, 456, 217]
並び替え開始
終了
[11, 217, 362, 441, 452, 456, 544, 590, 593, 867]