[アルゴリズム] バブルソート(Ruby編)

2016年12月28日

Ruby テクノロジー プログラミング 特集

人気の高いRuby言語で挑戦してみますが、アルゴリズムは同じなので、書き方の練習程度に見てもらえるといいと思います。 Rubyはインタプリタ言語ですが、フレームワークと連動しない場合は、コマンドラインでの利用もちょいちょい見かけるのでサーバーエンジニアでもよく使っているという話も聞きますね。 数年前に、PHPを抜いてよく使われる言語として人気言語になったRubyが何で人気があるのか、実際にプログラミングしてみるとなんとなく分かるのは、コマンドを打ち込むプログラマーの痒いところに手が届くようなアルゴリズムが組めるところじではないでしょうか? 個人的には、C言語系の書き方ではなく、shellやpython系のセミコロン無しスクリプトなので、毎回プログラムする時に、セミコロンを付けてしまい実行エラーになるのが痛い言語という印象です。

ソースコード

def bubbleSort(numbers) while true do flg = 0 (numbers.count-1).times do |i| num1 = numbers[i] num2 = numbers[i+1] if num1 > num2 then numbers[i] = num2 numbers[i+1] = num1 flg += 1 end end if flg == 0 then break end end numbers end puts bubbleSort([2,12,7,16,8,13])

解説

そこまで使いこなしていないRuby言語ですが、他の言語と決定的に違うのは繰り返し言語の種類が多いことと、仕様が特殊という点でしょうか。 変数の型が緩いのはPHPと同じ感じですが、配列の扱いなど、なるべくエラーができくい作りが、言語初心者にとっては非常に優しい言語とも思えますね。

1. rubyの繰り返し処理

一般的なfor文を使わずに、times文とwhile文を使っています。 while文を使ったのは、他の言語と仕様合わせの為なので、loopやfor文を使ってもなんも問題ありません。

2. インクリメントが無い!!

Ruby言語にはインクリメント処理が無いです。 これは複数言語を扱うエンジニアにとっては、不具合確率の高そうな仕様ですね。 何故採用されなかったのか不思議ですが、変数代入型で乗り切りましょう。

3. 関数

functionではなくdefというところが独自性を感じずにはいられないですね。 そして、いまだにピントこないのが、returnをせずに、最終行に返す変数を配置するだけという、少しやっかいそうな仕様です。 関数の途中でreturn処理したくなったらどうするんでしょうか?

結果

$ ruby bubbleSort.rb 2 7 8 12 13 16 コマンドを叩いて結果を取得しましたが、関数使って汎用性も出しておいたので、再利用価値はあるかもしれませんね。 でも、Ruby言語で配列のsort処理は Array.sort で簡単に行なえますから・・・

アルゴリズム過去記事

いろいろなプログラム言語でアルゴリズム学習