「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python の並べ替えアルゴリズム

Python の並べ替えアルゴリズム

2024 年 8 月 31 日に公開
ブラウズ:215

Sorting Algorithms in Python

並べ替えとは何ですか?

並べ替えとは、データ項目間の線形関係に基づいて、データを特定の順序 (通常は昇順または降順) に配置するプロセスを指します。

なぜ並べ替えが必要なのでしょうか?

並べ替えは、効率的なデータの取得、データ分析の簡素化、全体的なデータ管理の強化を可能にするため、構造化データを扱う場合に非常に重要です。

ソートアルゴリズム

この投稿では、バブル ソート、選択ソート、挿入ソート、マージ ソート、クイック ソートの並べ替えアルゴリズムについて説明します。

バブルソート

バブル ソートは配列を繰り返し処理し、隣接する要素を比較し、順序が間違っている場合は入れ替えます。このプロセスは、配列がソートされ、より大きな要素が最後まで「バブリング」するまで続きます。

アルゴリズム

ステップ 1: 開始

ステップ 2: i = 0
ステップ 3: i ステップ 4: j = 0
ステップ 5: j ステップ 6: array[j] > array[j 1] の場合、ステップ 7 に進みます。それ以外の場合はステップ 8 に進みます
ステップ 7: array[j] と array[j 1]
を交換する ステップ 8: j をインクリメントします。ステップ 5 に進む
ステップ 9: i をインクリメントします。ステップ 3 に進む
ステップ 10: 終了

コード

def bubble_sort(arr): print("ソート前の配列: ", end='') 印刷(arr) range(len(arr)) 内の i の場合: range(len(arr)-i-1) の j の場合: arr[j] > arr[j 1]の場合: arr[j]、arr[j 1] = arr[j 1]、arr[j] print("ソート後の配列: ", end='') 印刷(arr) # 主要 bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6])
def bubble_sort(arr):
    print("Array Before Sorting: ", end='')
    print(arr)
    for i in range(len(arr)):
        for j in range(len(arr)-i-1):
            if arr[j] > arr[j 1]:
                arr[j], arr[j 1] = arr[j 1], arr[j]

    print("Array After Sorting: ", end='')
    print(arr)

# Main
bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6])
時間計算量

ベストケース : O(n)

平均的なケース: O(n^2)
最悪の場合: O(n^2)

選択範囲の並べ替え

選択ソートは、配列のソートされていない部分で最小値を見つけて、その部分の先頭に配置します。

アルゴリズム

ステップ 1 : 開始

ステップ 2 : i = 0
ステップ 3 : i ステップ 4: 最小値 = i; j = i 1
ステップ 5 : j ステップ 6 : array[minimum_value] > array[j] の場合、ステップ 7 に進みます。それ以外の場合はステップ 8 に進みます
ステップ 7 : minimum_value = j
ステップ 8: j をインクリメントします。ステップ 5 に進む
ステップ 9 : array[minimum_value] と array[i]
を交換する ステップ 10: i をインクリメントします。ステップ 3 に進む
ステップ 11 : 終了

コード

def 選択ソート(arr): print("ソート前の配列: ", end='') 印刷(arr) 範囲 (len(arr) - 1) の i の場合: min_val = i range(i 1, len(arr)) の j の場合: arr[j] def bubble_sort(arr): print("Array Before Sorting: ", end='') print(arr) for i in range(len(arr)): for j in range(len(arr)-i-1): if arr[j] > arr[j 1]: arr[j], arr[j 1] = arr[j 1], arr[j] print("Array After Sorting: ", end='') print(arr) # Main bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6]) 時間計算量

最良のケース : O(n^2)

平均的なケース: O(n^2)
最悪の場合: O(n^2)

挿入ソート

挿入ソートは、ソートされていない部分から各要素を取得し、ソートされた部分の正しい位置に挿入することによって、一度に 1 要素ずつソートされた配列を構築します。

アルゴリズム

ステップ 1: 開始

ステップ 2: i = 1
ステップ 3: i ステップ 4: key = arr[i]
ステップ 5: j = i - 1
ステップ 6: j >= 0 かつ arr[j] > key の場合、ステップ 7 に進みます。それ以外の場合はステップ 10 に進みます
ステップ 7: arr[j 1] = arr[j]
ステップ 8: j を 1 だけデクリメントします
ステップ 9: ステップ 6 に進む
ステップ 10: arr[j 1] = key
ステップ11:iを1だけインクリメントする。ステップ 3 に進む
ステップ 12: 終了

コード

def 挿入_並べ替え(arr): range(1, len(arr)) の i の場合: キー = arr[i] j = i - 1 j >= 0 および arr[j] > キーの場合: arr[j 1] = arr[j] j -= 1 arr[j 1] = キー # 主要 arr = [7、4、1、3、4、7、87、9、6、4、2、2、3、5、6] print("ソート前の配列:", arr) 挿入ソート(arr) print("ソート後の配列:", arr)
def bubble_sort(arr):
    print("Array Before Sorting: ", end='')
    print(arr)
    for i in range(len(arr)):
        for j in range(len(arr)-i-1):
            if arr[j] > arr[j 1]:
                arr[j], arr[j 1] = arr[j 1], arr[j]

    print("Array After Sorting: ", end='')
    print(arr)

# Main
bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6])
時間計算量

ベストケース : O(n)

平均的なケース: O(n^2)
最悪の場合: O(n^2)

マージソート

マージ ソートは、配列をより小さいサブ配列に再帰的に分割し、並べ替えてから、それらを再びマージする分割統治アルゴリズムです。

アルゴリズム

マージソートアルゴリズム
ステップ 1: 開始
ステップ 2: length(array) ステップ 3:mid_point = length(array) // 2
ステップ 4: left_half = array[:mid_point]
ステップ 5: right_half = array[mid_point:]
ステップ 6:sorted_left = merge_sort(left_half)
ステップ 7:sorted_right = merge_sort(right_half)
ステップ 8: マージを返す(sorted_left、sorted_right)
ステップ 9: 終了

マージ関数
ステップ 1: 開始
ステップ 2:sorted_merge = []
ステップ 3: l = 0、r = 0
ステップ 4: l ステップ 5: left[l] ステップ6: left[l]をsorted_mergeに追加します。 l を 1 ずつ増やす
ステップ 7: right[r] をsorted_mergeに追加します。 r を 1 増やす
ステップ 8: ステップ 4 に進む
ステップ 9: l ステップ 10: left[l] をsorted_merge に追加します。 l を 1 ずつ増やす
ステップ 11: ステップ 9 に進む
ステップ 12: r ステップ 13: right[r] をsorted_merge に追加します。 r を 1 増やす
ステップ 14: ステップ 12 に進む
ステップ 15:sorted_merge
を返す ステップ 16: 終了

コード

def マージ(左、右): ソートマージ = [] l = r = 0 l def bubble_sort(arr): print("Array Before Sorting: ", end='') print(arr) for i in range(len(arr)): for j in range(len(arr)-i-1): if arr[j] > arr[j 1]: arr[j], arr[j 1] = arr[j 1], arr[j] print("Array After Sorting: ", end='') print(arr) # Main bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6]) 時間計算量

ベストケース : O(n log n)

平均的なケース: O(n log n)
最悪の場合: O(n log n)

クイックソート

Quick Sort は、分割統治アプローチを使用する効率的なインプレース並べ替えアルゴリズムです。ピボット要素を選択し、ピボットより小さい要素が左側に配置され、ピボットより大きい要素が右側に配置されるように、ピボットを中心に配列を分割します。このプロセスはサブ配列に再帰的に適用されます。

アルゴリズム

クイックソート
ステップ 1: 開始
ステップ 2: 低 ステップ 3: pivot_index = パーティション(arr, low, high)
ステップ 4: クイックソート(arr, low, pivot_index - 1)
ステップ 5: クイックソート(arr, pivot_index 1, high)
ステップ 6: 終了

パーティション関数
ステップ 1: 開始
ステップ 2: ピボット = arr[高]
ステップ 3: 左 = 低、右 = 高 - 1
ステップ 4: 左 ステップ 5: arr[left] > ピボットかつ arr[right] を交換します。 ステップ 6: arr[left] をインクリメントします ステップ 7: arr[right] >= ピボットの場合、右をデクリメントします
ステップ 8: ステップ 4 に進む
ステップ 9: arr[left] と arr[high]
を交換します ステップ 10: 左に戻る
ステップ 11: 終了

コード

def パーティション(arr、低、高): ピボット = arr[高] 左 = 低い 右 = 高 - 1 左 ピボットおよび arr[right] = ピボットの場合: 右 -= 1 arr[左]、arr[高] = arr[高]、arr[左] 左に戻る def クイックソート(arr、低、高): 低い def bubble_sort(arr): print("Array Before Sorting: ", end='') print(arr) for i in range(len(arr)): for j in range(len(arr)-i-1): if arr[j] > arr[j 1]: arr[j], arr[j 1] = arr[j 1], arr[j] print("Array After Sorting: ", end='') print(arr) # Main bubble_sort([7, 4, 1, 3, 4, 7, 87, 9, 6, 4, 2, 2, 3, 5, 6]) 時間計算量

ベストケース : O(n log n)

平均的なケース: O(n log n)
最悪の場合: O(n^2)

リリースステートメント この記事は次の場所に転載されています: https://dev.to/thecspandz/sorting-algorithms-in-python-2mdj?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3