Rubyでバブルソート処理を書いてみました。
Rubyは、「まつもと ゆきひろ」さんが生み出したプログラミング言語で、日本人で初めてメジャーとなった言語ですね。
日本人として、Rubyがどんな言語なのかを知っておかないといけないと思い、適当に(他のHP等を参考にして)バブルソート処理を書いてみました。
とりあえず書いたのがこちら
# バブルソート2 def bubble_sort2(array) # arrayのコピー ary = array.dup pos_max = ary.length - 1 (0...(pos_max)).each{|n| (0...(pos_max-n)).each{|ix| # 隣と比較して前が大きかったら後ろと交換 iy = ix + 1 # 多重代入 ary[ix], ary[iy] = ary[iy], ary[ix] if ary[ix] > ary[iy] #交換 } } ary end puts "---------------------------" array = 10.times.map{rand(100)} p array puts "---------------------------" p bubble_sort2(array) puts "---------------------------"
普段からRubyを書いていない人(僕)からすると、each文に違和感を感じたので、for文に書き直してみました。
# バブルソート def bubble_sort(array) # arrayのコピー ary = array.dup pos_max = ary.length - 1 for n in 0...(pos_max) do for ix in 0...(pos_max-n) do # 隣と比較して前が大きかったら後ろと交換 iy = ix + 1 # 多重代入 ary[ix], ary[iy] = ary[iy], ary[ix] if ary[ix] > ary[iy] #交換 end end ary end puts "---------------------------" array = 10.times.map{rand(100)} p array puts "---------------------------" p bubble_sort(array) puts "---------------------------"
どちらのプログラムも同じ結果が出力されます。
僕も知らなかったのですが、for文とeach文の違いは、ブロック内の変数のスコープが異なるとのこと。
for文は、変数のiyやixをend外でも使う事ができますが、each文だと使えません。