Skip to content

Instantly share code, notes, and snippets.

@hm0429
Created October 31, 2015 11:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hm0429/9df946a2607cfad900b2 to your computer and use it in GitHub Desktop.
Save hm0429/9df946a2607cfad900b2 to your computer and use it in GitHub Desktop.
bubble_sort02.rb
## bubble_sort.rb
## データの件数
N = 10
## データの比較回数を保持するための変数です。
@comparison_count = 0
## データの交換回数を保持するための変数です。
@swap_count = 0
def bubbleSort(data)
j = 0 ## ループの回数を保持するための変数です。
## データの並び替えのための繰り返し処理を行います。
begin
flag = false ## 並び替えがあったかどうかを示すフラグです。並び替えが一度でもおこなわれればtrueになります。
## 先頭からすべての要素を確認していきます。
i = 0
while i < data.length - 1 - j do
## 左右の要素を比較し、並び順がおかしければ左右の要素を入れ替えます。
if data[i] > data[i+1]
flag = true
tmp = data[i]
data[i] = data[i+1]
data[i+1] = tmp
@swap_count = @swap_count + 1
end
i = i + 1
@comparison_count = @comparison_count + 1
end
j = j + 1
end while flag == true ## 1度も並び替えせずに終了できれば、ソートができているということなので、ループを終了します。
end
## データの準備
data = (1..N).to_a ## 1からNまでの配列を作成
data.shuffle! ## 配列の要素をランダムに並べ替える
## data = [3,5,2,4,1]
puts "ソート開始: #{Time.now}"
puts "ソート前: #{data}".slice(0..100)
bubbleSort(data)
puts "ソート終了: #{Time.now}"
puts "ソート後: #{data}".slice(0..100)
puts "比較回数: #{@comparison_count}"
puts "交換回数: #{@swap_count}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment