[DS +アルゴ] 006と2つの単純な順序付けのためのコードは、

1.クイックソートクイックソート

  • また、交換ソート分割(パーティション交換ソート)としても知られています
  • すべてのデータの他の部分よりもデータの全ての部分があると、前記トリップデータを順序付けることによって、二つの別々の部分に分類します
  • この方法データの2つの部分はすぐにソートされ、その後、全体のソート処理を再帰的にすることができ

ステップ1.1

  1. 「参照」と呼ばれる、一連の1つの要素を選択(ピボット)
  2. ソート順序は、基準要素の前に置か要素が基準値よりも小さい場合、基準値は、すべての要素が基準に戻るよりも大きいです
    • 同じ番号が統一のように、両側に置くことができます
  3. パーティションの終了後に、参照列の数の中間位置(実際には、その最終的な位置)にあります
    • これは、パーティション(パーティション)動作と呼ばれます
  4. 再帰基準値よりも列の数とサブ要素値をサブエレメント列のソートの基準数よりも大きい場合(これを再帰的)
  5. 再帰輸出:列数の大きさがゼロまたはAであります
    • それはソートされている良いです
    • 少なくとも一つの元素をその最終位置に置かなる各反復(繰り返し)、なぜなら

1.2パフォーマンス分析

  • 最適な時間の複雑さ:O(nlogn)
  • 最悪時間計算量:O(N- 2
  • 安定性:不安定

1.3 Pythonのコードサンプル

  • 高速タイプセットバージョンが一意ではありません
  • これは、高速思考の行、よりコストのスペースを考えることができます
from random import randrange


def quick_sort(lst):
    n = len(lst)
    if n <= 1:
        return lst

    pivot = lst[-1]
    front, rear = [], []
    for i in range(n-1):
        if lst[i] < pivot:
            front.append(lst[i])
        else:
            rear.append(lst[i])
    return quick_sort(front) + [pivot] + quick_sort(rear)


if __name__ == "__main__":
    lst = [randrange(10, 100) for _ in range(10)]

    print(">>> before sort:", lst)
    new_list = quick_sort(lst)
    print(">>> after sort: ", new_list)
  • クイックドレンが向上します
from random import randrange


def quick_sort(lst, start, stop):
    if stop <= start:
        return

    pivot = lst[stop]
    low, high = start, stop
    while low < high:
        while low < high and lst[low] < pivot:
            low += 1
        lst[high] = lst[low]
        while low < high and pivot <= lst[high]:
            high -= 1
        lst[low] = lst[high]
    lst[low] = pivot
    quick_sort(lst, start, low-1)
    quick_sort(lst, low+1, stop)


if __name__ == "__main__":
    lst = [randrange(10, 100) for _ in range(10)]

    print(">>> before sort:", lst)
    quick_sort(lst, 0, len(lst)-1)
    print(">>> after sort: ", lst)

2.マージソートマージソート

ステップ2.1

  1. それは最初言う:要素の列の数は出口に、1以下である場合
  2. 列の数は半減します
  3. 左は、再帰的にソートします
  4. 再帰的に右のソート
  5. 左右のマージ

2.2パフォーマンス分析

  • 最適な時間の複雑さ:O(nlogn)
  • 最悪時間計算量:O(nlogn)
  • 安定性:安定

2.3 Pythonのコードサンプル

from random import randrange


def merge_sort(lst):
    n = len(lst)
    if n <= 1:
        return lst

    mid = n // 2
    left = merge_sort(lst[:mid])
    right = merge_sort(lst[mid:])
    return merge(left, right)


def merge(left, right):
    L, R = 0, 0
    result = []
    nL, nR = len(left), len(right)
    while L < nL and R < nR:
        if left[L] < right[R]:
            result.append(left[L])
            L += 1
        else:
            result.append(right[R])
            R += 1
    if L < nL:
        result += left[L:]
    if R < nR:
        result += right[R:]
    return result


if __name__ == "__main__":
    lst = [randrange(10, 100) for _ in range(10)]

    print(">>> before sort:", lst)
    sorted_list = merge_sort(lst)
    print(">>> after sort: ", sorted_list)

おすすめ

転載: www.cnblogs.com/yorkyu/p/11979293.html