Pythonでのバブルソートアルゴリズムの実装

バブルソートは、初心者にとっては理解しやすく実装しやすいソートアルゴリズムの一つです。Pythonでは、簡単にバブルソートを実装することができます。以下では、Pythonバブルソートを実装する方法をいくつか紹介します。

pydocument.hatenablog.com

forループを使ったバブルソート

forループを使ったバブルソートは、Pythonバブルソートを実装する最も基本的な方法の一つです。以下のコードは、リストをソートするためのバブルソートの実装例です。

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]

上記のコードは、リストを引数として受け取り、それをバブルソートする関数を定義しています。2重のforループを使用して、隣り合う要素を比較し、必要に応じて交換を行います。最後に、ソートされたリストが返されます。

forループを使ったバブルソートの最適化

最適化された実装では、配列を反復処理する外側のループの終了条件が、配列が完全にソートされた場合に早期に終了するように変更されます。

def optimized_bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        swapped = False
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        if swapped == False:
            break

上記のコードでは、内側のループ中に交換が行われた場合には、swapped変数にTrueが格納されます。外側のループの終了条件に、swapped変数がFalseのままであれば、配列が完全にソートされたと判断し、早期に終了します。

whileループを使ったバブルソート

whileループを使ったバブルソートは、forループを使った方法よりも少し効率的であり、要素の比較をより少なくすることができます。以下のコードは、whileループを使ったバブルソートの実装例です。

def bubble_sort(arr):
    n = len(arr)
    swapped = True
    while swapped:
        swapped = False
        for i in range(1, n):
            if arr[i-1] > arr[i]:
                arr[i-1], arr[i] = arr[i], arr[i-1]
                swapped = True

上記のコードでは、whileループを使用して、隣り合う要素を比較し、必要に応じて交換を行います。ループを通過するたびに、最後の要素がソートされ、次のループでは比較する必要がなくなります。最後に、ソートされたリストが返されます。

内包表記を使ったバブルソート

Pythonの内包表記を使ったバブルソートは、コードを簡潔にすることができます。以下のコードは、内包表記を使ったバブルソートの実装例です。

def bubble_sort(arr):
    n = len(arr)
    [arr[j], arr[j+1]] = [arr[j+1], arr[j] for i in range(n) for j in range(0, n-i-1) if arr[j] > arr[j+1]]
    return arr

上記のコードでは、内包表記を使用して、隣り合う要素を比較し、必要に応じて交換を行います。内包表記は、forループを使用することなく、コードを短くすることができます。最後に、ソートされたリストが返されます。

まとめ

これらの方法は、Pythonバブルソートを実装するためのいくつかの方法の一部です。バブルソートは、大きなデータセットに対しては非常に効率的ではありませんが、小さなデータセットに対しては十分に高速に動作します。これらのプログラムはPythonの基本的な文法とライブラリで実装することができます。Pythonの基礎学習には下記のようなサイトの利用が有効です。

click.linksynergy.com

click.linksynergy.com