アルゴリズムの仕組み

基本的な動きは、**「リストの端から隣同士を比較し、大きい方を後ろへ送る」**の繰り返しです。

  1. リストの先頭から順に、隣り合う2つの要素を比較します。

  2. 左の要素が右の要素より大きい場合、その2つを入れ替えます(昇順の場合)。

  3. これをリストの最後まで繰り返すと、一番大きな要素が最後に配置されます。

  4. 最後の要素を除いた残りの部分で、再び同じ操作を繰り返します。

  5. 入れ替えが発生しなくなるか、すべての要素が確定するまで続けます。

 

特徴と性能

バブルソートは教育用としては優れていますが、大量のデータを扱う実用的な場面ではあまり使われません。

  • 時間計算量:

    • 平均・最悪の場合:O(n^2)

    • (要素数が2倍になると、計算時間は4倍かかります)

  • 空間計算量: O(1)

    • 追加のメモリをほとんど使わないため、省スペースです。

  • 安定性: 安定なソート

    • 同じ値の要素が複数ある場合、その前後関係は維持されます。

# バブルソート

def bubble_sort(arr):
    n = len(arr)
    # 全体のパスを繰り返す
    for i in rangeNo:
        # 最後の i 個はすでに確定しているので無視する
        for j in range(0, n - i - 1):
            # 隣り合う要素を比較
            if arr[j] > arr[j + 1]:
                # 要素を入れ替える
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

# 使用例
data = [64, 34, 25, 12, 22, 11, 90]
sorted_data = bubble_sort(data)
print(f"ソート後: {sorted_data}")

Last modified: Sunday, May 31, 2026, 1:51 PM