バブルソートアルゴリズムの簡易実装とRuby版
アルゴリズムの原理
隣接する要素を比較する。もし1つ目が2つ目より大きければ、両方を入れ替えます。
同じことを、隣り合う要素の各ペアについて、先頭のペアから末尾のペアに至るまで行います。このとき、最後の要素が一番大きな数字になるはずです。
上記の手順を、最後の要素以外のすべての要素について繰り返します。
一度に比較できる数が少なくなるまで、上記の手順を繰り返してください。
実装
このような配列があったとします。[4, 1, 3, 2]
バブルソートは、最初の数から始めて、その数と後の数を比較し、その数が後の数より大きければ、それらの位置を入れ替えるというものである。
例えば、最初に4と1を比較して、4が1より大きいと分かったら、スワップ -> [1, 4, 3, 2] とします。
2回目に4と3を比較し、4の方がまだ大きいことがわかり、-> [1, 3, 4, 2]をスワップします。
3回目に4と2を比較し、やはり4が2より大きいので、-> [1, 3, 2, 4]を交換します。
こうして、最初のループの後、最大の数である4が、水底から泡のように立ち上がりながら配列の末尾に追加されます。そして、配列全体を並べ替えるには、一番大きい数字を最後にトップし、次に2番目に大きい数字を最後から2番目の位置にトップし、さらに3番目にトップする、というサイクルを繰り返します。
先ほどの配列に戻ると、2回目の比較が始まり、状態は[1, 3, 2, 4]になっています。
1と3を比較し、1が3より小さい場合はスキップ -> [1, 3, 2, 4] となります。
3と2を比較し、3が2より大きい場合、スワップ -> [1, 2, 3, 4] とする。
ラウンドはここで停止できます。なぜなら、1ラウンド目で最大の4が最後までトップになっているので、2ラウンド目は2番目に大きい数字が最後から2番目の数字をトップにしているかどうかを確認するだけでよいからです。
そしてラウンド3へ(とりあえずソートされたようですが)
1と2を入れ替えずに比較する[1,2,3,4]。
ここで、比較はすべて終了です。原理はとてもシンプルです。
def bubble_sort(list)
list.each_index do |index|
(list.length - index - 1).times do |e|
if list[e] > list[e + 1]
list[e], list[e + 1] = list[e + 1], list[e]
end
end
end
end
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
win7でrubyのソースコードからコンパイルしてインストールする方法
-
基本的なユーザー登録とログイン機能を実装するためのRuby on Railsチュートリアル
-
Ruby on Railsフレームワークの設計構造をMVCマインドで理解する
-
RubyのプログラムでXML形式のデータをパースするためにREXMLを呼び出す例
-
Ruby は REXML ライブラリを使って xml 形式のデータをパースする
-
RubyプログラムにおけるXMLファイルの作成と解析のための方法
-
Ruby on RailsにおけるCucumberの活用を解説します。
-
Ruby on Railsのビューの書き方に関するいくつかのアドバイス
-
Ruby on RailsのActiveResourceの使い方解説
-
Ruby WebDriverガイド