プログラマー オンライン ウィークリー (バブル アルゴリズム)

みなさん、こんにちは。Programmers Online Weekly へようこそ! この号では、古典的な並べ替えアルゴリズムであるバブル アルゴリズムを詳しく調べ、特定のコード実装を添付します。

導入

バブル アルゴリズムはシンプルですが非効率な並べ替えアルゴリズムです。その原理は非常に直感的です。隣接する要素の比較と交換を通じて、最大 (または最小) の要素が配列の最後まで徐々に「バブル」されます。一人称で説明させていただきます。

まず、バブル アルゴリズムのコード実装を見てみましょう。

コード

def bubble_sort(arr):
    n = len(arr)
    for i in range(n - 1):  # 外层循环控制比较轮数
        for j in range(n - i - 1):  # 内层循环控制每轮的比较次数
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]  # 交换元素位置

arr = [4, 2, 7, 1, 3]
bubble_sort(arr)
print("排序结果为:", arr)

原理

上記はバブル ソート アルゴリズムのコード実装です。まず、関数を定義しbubble_sort、並べ替える配列を渡しますarr次に、2 レベルのループを使用して隣接する要素を比較し、前の要素が次の要素より大きい場合にそれらを交換します。この操作により、比較の各ラウンドで最大の要素を配列の最後に「バブリング」することができます。最後に、順序付けされた配列を取得できます。

では、バブルソートの時間計算量はどれくらいでしょうか? 2 レベルのループを実行する必要があるため、外側のループは n - 1 回実行され、内側のループは n - i - 1 回実行されるため、比較の合計数は ( n − 1 ) + ( n − 2 ) となります。 + . . . + 1 (n - 1) + (n - 2) + ... + 1( n1 )+( n2 )+...+1、つまりn × ( n − 1 ) ÷ 2 n \times (n - 1) \div 2n×( n1 )÷したがって、バブルソートの時間計算量はO ( n 2 ) O(n^2)O ( n2 )実際のアプリケーションでは、ソートする配列が大きい場合、バブル ソートの方が遅く見えることがありますが、データ セットが小さい場合は、バブル アルゴリズムが依然として適切な選択肢です。

今回の紹介を通じて、皆さんにもバブルアルゴリズムについての理解を深めていただければ幸いです。ご質問やご意見がございましたら、コメント欄に残してください。また次号でお会いしましょう。

宣伝する

広告1

Programmers Online Weekly では原稿を募集しています。
リンク: http://t.csdn.cn/o5LYu

広告2

「PythonとUnityコラム」始まりました!ぜひチェックして購読してください!
リンク: http://t.csdn.cn/nGiXC

広告3

広告スペースをレンタルします!宣伝したい方はフォローしてプライベートメッセージを送ってください!

投放
得到宣传目的
阅读
阅读
榨干了我
程序员在线周刊
广告
用户

おすすめ

転載: blog.csdn.net/Python_enjoy/article/details/132948510