IT Soldier Sakuri !!

Oracle使い。いつのまにかIT戦士になってしまったさくりの可哀想な奮闘記。

Rubyでソートを考える①バブルソート

今日異動の内示が出た。
異動といっても部内異動でアプリ→インフラで、
そもそも私はずっとインフラで、去年アプリのリリースが間に合わないって
アプリのお手伝いに来ていただけだから、いつかは戻るかなって思ってたけど。
アプリチームの課長が好きなのと、仕事しないでまったりしていられるから
今のチーム好きなんだけどな(´・ω・`)
ま、インフラチームの方が仕事は面白いんだけどね♪


さて、Rubyで何を書こうかなって思ってたんだけど、
ふとアルゴリズムの本が目に入って、ソートにたくさん種類があることを知りました。
私はOracle使いなので、データを取得するときにORDER BYしちゃうので、
ソートとか正直あんまり気にしたことがなかった。


Rubyでももちろんソートコマンドはある。


これで簡単にソートができる。

# coding: windows-31j
#------------------------------
#ソートコマンドを使ってみる
#2015/08/21
#------------------------------
words = []

puts "英単語をabc順に並び替えるよ!!"
puts "英単語を何個でも入力してください。"
puts "最後はEnterだけの空行にしてください"

while word = gets.chomp
    break if word.empty?
    words << word
end

puts "並び替えが完了しました!"
puts words.sort


じゃソートコマンドを使わずにソートさせたい!!
まず手始めにバブルソートなるものを。
処理は遅めだけど、理解しやすいソート。
バカソートなんて言われちゃったりもする。

バブルソートとは(処理方法)
隣り合う2つのデータを比較し、前の要素の方が大きければ交換。
データ列の後方から前方へ向かって全てのデータについて実施していくと、最も小さいデータが先頭に来る。
2回目のソートでは、ソート対象は2番目以降のデータに。
このソートで、2番目のデータの位置が確定。
これを繰り返すことで、ソートが完成。

繰り返しが多いので、処理が遅くなるということみたい。

では早速バブルソートを書いてみる。

# coding: windows-31j
#------------------------------
#バブルソートをしてみる
#2015/08/21
#------------------------------

puts "英単語をabc順に並び替えるよ!!"
puts "英単語を何個でも入力してください。"
puts "最後はEnterだけの空行にしてください"

words = []

while word = gets.chomp
    break if word.empty?
    words << word
end

repeat = words.length

while repeat != 0
    num1 = words.length - 1
    num2 = num1 - 1

    while num1 != 0
        if words[num2] > words[num1]
            words[num2], words[num1] = words[num1], words[num2]
        end
        num1 = num1 - 1
        num2 = num2 - 1
    end
repeat = repeat - 1
end

puts "並び替えが完了しました!"
puts words

プログラム勉強がてら、他のソートもちょっと勉強してみようっと。