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
プログラム勉強がてら、他のソートもちょっと勉強してみようっと。