バブルソートとは?【アルゴリズム解説】

image of bubblesort eyecatch

ソート(sort)とは、日本語で「並べ替える、分類する、仕分けする」などの意味があります。プログラミングでソートというと、バラバラに並んだ数字のカードを小さいものから大きいものに並べ替える(昇順)、大きいものから小さいものに並べ替える(降順)、の事をいいます。プログラミングでソートをする方法(アルゴリズム)は色々あり、今回はバブルソートを取り上げます。

他のソートのアルゴリズムは以下の記事を参照ください。

目次

バブルソートとは?

バブルソート(bubble sort)とは、隣り合った数字を比べて並べ替えていき、昇順または降順に並べ替える方法になります。

言葉だけだと分かりにくいので、図を用いて解説していきます。まず、始めに下図のように5枚の数字のカードがバラバラに並んでいるとします。

これを一番後ろ(または一番前)のカードから順に大小を比較します。今回の例では、昇順(小さいものから大きいものへ)で並べ替えていきたいと思います。

Step1:一番後ろのカードから

まず始めに、一番後ろのカードから順に隣り合うカードの大小を比較して、右側のカードの方が小さい場合はカードを入れ替えるという操作を行います。

Step1-1:3と1のカードの比較

まずStep1-1として31のカードを比較します。一番後ろのカード3とその左横のカード1を比較して、一番後ろの数字の方が大きければ、そのまま。小さければカードを入れ替えます。今回は一番後ろである3のカードの方が1より大きいのでそのままです。

Step1-2:1と5のカードの比較

続いて、Step1-2として、15のカードを比較します。右側のカード1と左側のカード5を比較して、右側のカードの方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側のカードである1のカードの方が5より小さいので、入れ替えます。

Step1-3:1と2のカードの比較

続いて、Step1-3として、12のカードを比較します。右側のカード1と左側のカード2を比較して、右側のカードの方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側のカードである1のカードの方が2より小さいので、入れ替えます。

Step1-4:1と4のカードの比較

続いて、Step1-4として、14のカードを比較します。右側のカード1と左側のカード4を比較して、右側のカードの方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側のカードである1のカードの方が4より小さいので、入れ替えます。

ここまででStep1は終了です。Step1で一番左端(1のカード)が確定しました。

Step2:一番後ろのカードから

続いて、Step2です。Step2でもStep1と同様に、一番後ろのカードから順に隣り合うカードの大小を比較して、右側のカードの方が小さい場合はカードを入れ替えるという操作を行います。

Step2-1:3と5の比較

まずStep2-1として35のカードを比較します。一番後ろのカード3とその左横のカード5を比較して、一番後ろの数字の方が大きければ、そのまま。小さければカードを入れ替えます。今回は一番後ろである3のカードの方が5より小さいので入れ替えます。

Step2-2:2と3の比較

続いて、Step2-2として、23のカードを比較します。右側のカード2と左側のカード3を比較して、右側のカードの方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側のカードである3のカードの方が2より大きいので、そのままにします。

Step2-3:4と2の比較

続いて、Step2-3として、42のカードを比較します。右側のカード4と左側のカード2を比較して、右側のカードの方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側のカードである2のカードの方が4より小さいので、入れ替えます。

ここまででStep2は終了です。12の比較を行っていませんが、Step1で一番左端(1のカード)が確定している為です。また、Step2で左から2番目(2のカード)も確定しました。

Step3:一番後ろのカードから

続いて、Step3です。Step3でもStep1、2と同様に、一番後ろのカードから順に隣り合うカードの大小を比較して、右側のカードの方が小さい場合はカードを入れ替えるという操作を行います。

Step3-1:3と5の比較

まずStep3-1として35のカードを比較します。一番後ろのカード5とその左横のカード3を比較して、一番後ろの数字の方が大きければ、そのまま。小さければカードを入れ替えます。今回は一番後ろである5のカードの方が3のカードより大きいので、そのままにします。

Step3-2:4と3の比較

まずStep3-1として43のカードを比較します。後ろから2番目のカード3とその左横のカード4を比較して、後ろの数字の方が大きければ、そのまま。小さければカードを入れ替えます。今回は右側(後ろ側)である3のカードの方が4のカードより小さいので、入れ替えます。

これで昇順に並べ替えることができました。



バブルソートの名前の由来ですが、各値が泡のようにふわふわ移動していく(本記事で言えば、1のカードがイメージしやすい?)のがバブルソートと言われるようになった由来とか由来でないとか…。



バブルソートを実際にPythonで書いてみました。是非ご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次