Pythonでアルゴリズム「バブルソート」:”景気のいい”ソート、ではありませんでした。
はい、「Pythonでアルゴリズム・シリーズ」ですよ😄!今回から、アルゴリズムの「本丸」である「並べ替え(ソート)」に切り込んでまいります!ソートは、小さい順あるいは大きい順に並べることです。
返り打ちに合わないように丁寧に見ていきましょう。今回取り上げるのは、数ある並べ替えアルゴリズムの中で、「バブルソート」です!だいたい、どんなテキストでも、「バブルソート」から始まりますね~🙂。
ご多分に漏れず、このブログも「バブルソート」から取り組みましょう!カメみたいに口から泡を吹かないよう、まずは「バブルソートって何だろう?」というところから確認しましょう!
「バブルソート」って何?
バブルソートは、並べ替えアルゴリズムの一つです。で、「バブル」って何ですかね!?
「ジュリアナ…トウキョー!!!😆」
それは、ちょっと味わってみたい「バブル景気」というやつですね!って違うわ(打ち合わせどおりですね🧡)。ここでは、バブルは、まさに「泡」です。泡は、軽いので浮かび上がります。この「浮かび上がる」という特徴があるので、「バブルソート」と呼ばれます。数値が小さい順(or大きい順)に浮かんでくるアルゴリズム何です。
ただ、アルゴリズムが分かりやすくて学びやすいのはいいのですが、端から端まで計算するので計算量は多め(処理速度は遅め)であることに注意が必要になります。
浮かびあがるといってもイメージが湧かない?ですか…。では、例によって図解をしてみますよ😄。
ループは、外側と内側の2つある
では、5個の数字を左から小さい順に並べるソートを例にとって、バブルソートの核心に迫ります😆!
バブルソートを行うには、ループが必要になります。しかも、2つのループを「入れ子」にします。
ループの「入れ子」とは、「ループの中にループがある」状態を指します。ここでは、「外側のループ」「内側のループ」という表現を使って解説していきますよ!
外側のループ:左から右へ、「小さい順」に値を決めていく
「外側のループ」の目標は、なんといっても「左から右の順に、小さい順に値を決めていく」ことです。1回目の外側のループの目標は、「0番の値」を決めることです。外側のループが4回転して、「3番の値」まで決まれば目標達成です(4番の値は自動的に決まります)。
上の図は、「外側1回目のループ」で、この中にある「内側のループ」が4回転します。ループ終了後、一番左(0番)の値が確定しました😆!
内側のループ:右から左へ、隣り合う値を比較して、小さい値を浮かびあがらせる。
内側のループは、「右から左へ、となりある値を比較して、右の値が小さければ交換」を繰り返します。外側のループにより決定したい値と、その右側を比較したら、内側のループは終了します。
この内側のループを右端から繰り返していくと、ループ範囲の中でもっとも小さい値が左側に「浮かび上がって」きます。この様子が、「バブル」なわけですね~。
内側のループ範囲は、どんどん狭まる
0番目の値が確定して、2回目のループに突入します。内側のループが、やはり一番右側の値から始まります。2回目のループの目標は、「1番の値」を決めることです。
外側1回目のループと同様に、「となりあう2値を比べて、右側が小さいなら交換する、右側が大きいなら何もしない」を繰り返します。すると、どんどん小さい値が浮かびあがりますが、決定したい番合(1番)を最後に比較したら、内側のループ終了です。外側1回目より、内側のループ回数が1回減ったことに気づきましたか~🙂?
このように、外側のループの回数が進むにつれ、小さい側の値の順番がどんどん決まっていき、内側のループの範囲は縮んでいくのです~😉。
外側最後のループ:内側のループは1回しか回らない
外側3回目のループは、外側2回目と同じ処理なので省略して、最後の外側のループ(4回目)を見てみましょう!
左側から3つ並びが決まってしまいました。3番目の値を決めることが、4回目のループの目標ですが、、、、もう比較する値が2つしか残っていないようです。
となれば、内側のループは、1回行うだけでよいわけです。内側のループは、最終的に1回転するのみとなとなりました😄。
これで、3番の値が決まりました。これにより、自動的に4番、すなわち、一番右の値も決まったので、並べ替え完了となります🎉!
やったね~!これが、バブルソートの処理の流れです。
「左から順に小さい値を確定していくため、右から順に値を比較しては交換するを繰り返す」ようすが見て取れましたか?このイメージをしっかりもちつつ、次回以降、実際にPythonのコードを書いてみることにしましょう。
本日は、ここまで~!
では、ビーダゼーン!
※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。
この記事が気に入ったらサポートをしてみませんか?