Pythonでバブルソート法(交換法)を実装する方法をソースコード付きで解説します。
【バブルソートとは】リストを昇順・降順ソート
バブルソート法(交換法)は、リストの隣接する2つの要素の値を順に比較し、大小関係が指定した条件を満たしていない場合に、交換を行うアルゴリズムです。
交換が一度も行われなくなったときに処理を終了し、そのときのリストが整列(ソート)されます。
値が大きい、もしくは小さい要素が浮かびあがってくることから、バブル(bubble:泡)ソートと呼ばれます。
バブルソート法で昇順ソートする場合の手順は以下のとおりです。
| 順序 | 操作 |
|---|---|
| ① | 1番目の要素と、隣接する2番目の要素の値を比較する。1番目の値の方が大きければ、要素の値を交換する。 |
| ② | 2番目の要素と、隣接する3番目の要素の値を比較する。2番目の値の方が大きければ、要素の値を交換する。 |
| ③ | 終端要素nまで2つの要素の比較と交換を繰り返す。 |
| ④ | 終端の要素には、最も大きい値が格納されるので、比較と交換を行う終端位置を1つ減らす。 |
| ⑤ | 交換が一度も生じなくなるまで手順①〜③を繰り返す。 |
| 参考 | 【バブルソート法(交換法)とは】リストの昇順・降順ソートと計算量 |
【サンプルコード】Python3
Python3でリストのバブルソートを行うサンプルコードです。
def babble_sort(arr):
# リストの要素数
N = len(arr)
for i in range(N-1):
cnt = 0 # 交換回数のリセット
for j in range(0, N-1-i):
# 前から順に隣り合う要素を比較し、左が右の要素に比べ大きい場合交換
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
cnt = cnt + 1 # 交換回数をカウント
print(str(i+1)+"回目:", arr)
# 交換が1度も発生しなければ終了
if cnt == 0:
return arr
return arr
# バブルソート1
arr = [7, 2, 5, 3]
print("ソート前:", arr)
babble_sort(arr)
print("ソート後:", arr)
print("-----------")
# バブルソート2
arr = [2, 3, 7, 5]
print("ソート前:", arr)
babble_sort(arr)
print("ソート後:", arr)
"""
ソート前: [7, 2, 5, 3]
1回目: [2, 5, 3, 7]
2回目: [2, 3, 5, 7]
3回目: [2, 3, 5, 7]
ソート後: [2, 3, 5, 7]
-----------
ソート前: [2, 3, 7, 5]
1回目: [2, 3, 5, 7]
2回目: [2, 3, 5, 7]
ソート後: [2, 3, 5, 7]
"""
| – | 関連記事 |
|---|---|
| 1 | Python版OpenCV入門 サンプル集 |
| 2 | 【画像処理入門】アルゴリズム&プログラミング |

コメント