ソートアルゴリズム: バブルソート、クイックソート、選択ソート

1. バブルソート

        バブル ソートは単純な並べ替えアルゴリズムです。ソート対象の配列を繰り返し調べて、一度に 2 つの要素を比較し、順序が間違っている場合はそれらを交換します。シーケンスを訪問する作業は、交換する必要がなくなるまで、つまりシーケンスがソートされるまで繰り返されます。このアルゴリズムの名前は、小さな要素が交換によってシーケンスの先頭にゆっくりと「浮く」という事実に由来しています。

1.1 アルゴリズムの説明

  • 隣接する要素を比較します。最初の値が 2 番目の値より大きい場合は、両方を交換します。
  • 隣接する要素の各ペアに対して、最初の最初のペアから最後の最後のペアまで同じことを行い、最後の要素が最大の数値になるようにします。
  • 最後の要素を除くすべての要素に対して上記の手順を繰り返します。
  • 並べ替えが完了するまで手順 1 ~ 3 を繰り返します。

1.2 コードの実装

# while循环
def bubblesort(a):
    long=len(a)
    while long>0:
        for i in range(long-1):
            k=a[i+1]
            if k<a[i]:
                a[i],a[i+1]=k,a[i]
        long-=1
    return a


# for循环
def bubblesort(a):
    long=len(a)
    for j in range(-long,0):
        for i in range(long-1):
            k=a[i+1]
            if k<a[i]:
                a[i],a[i+1]=k,a[i]
    return a

2. クイックソート

        クイックソートの基本的な考え方: ソート対象のレコードはワンパスソートによって 2 つの独立した部分に分離され、レコードの一方の部分のキーワードが他方の部分のキーワードより小さく、その後、レコードの 2 つの部分が小さくなります。レコードを個別に並べ替えることで、全体の順序が整います。

2.1 アルゴリズムの説明

クイックソートは分割統治法を使用して、文字列 (リスト) を 2 つの部分文字列 (サブリスト) に分割します。具体的なアルゴリズムは次のように説明されます。

  • シーケンスから「ピボット」(ピボット) と呼ばれる要素を選択します。
  • 配列の順序を変更します。ベンチマーク値より小さいすべての要素はベンチマークの前に配置され、ベンチマーク値より大きいすべての要素はベンチマークの後ろに配置されます (同じ数値をどちらの側にも配置できます)。このパーティションが終了すると、ベンチマークはシーケンスの途中になります。これはパーティション操作と呼ばれます。
  • 基本値より小さい要素を含む部分配列と、基本値より大きい要素を含む部分配列を再帰的に並べ替えます。

2.2 コードの実装 

def quicksort(a):
    if len(a)<2:
        return a
    else:
        base=a[0]
        left=[i for i in a[1::] if i<base]
        right=[i for i in a[1::] if i>base]
        return quicksort(left)+[base]+quicksort(right)

 3. 並べ替えを選択します

        選択ソート (Selection-sort) は、シンプルで直感的なソート アルゴリズムです。その動作原理: まず、ソートされていないシーケンス内で最小 (最大) の要素を見つけ、それをソートされたシーケンスの開始位置に格納します。次に、引き続きソートされていない残りの要素から最小 (最大) の要素を見つけて、それをソートされたシーケンスの終わり。すべての要素がソートされるまで続きます。

3.1 アルゴリズムの説明

n レコードの直接選択と並べ替えでは、n-1 個の直接選択と並べ替えを通じて順序付けされた結果を取得できます。具体的なアルゴリズムは次のように説明されます。

  • 初期状態: 順序付けされていない領域は R[1..n] で、順序付けされた領域は空です。
  • i 番目のソート (i=1,2,3...n-1) が開始されると、現在の順序付き領域と順序なし領域はそれぞれ R[1..i-1] と R(i..n) になります。このソート プロセスでは、現在の順序なし領域から最小のキーを持つレコード R[k] を選択し、それを順序なし領域の最初のレコード R と交換します。これにより、R[1..i] と R[i+1 .. n) それぞれ、レコード数が 1 増加した新しい順序付けられた領域と、レコード数が 1 減少した新しい無秩序領域になります。
  • n-1 回の移動が終了し、配列がソートされました。

3.2 コードの実装 

def selectionsort(a):
    leng=len(a)
    for i in range(leng):
        min=i
        for j in range(i+1,leng):
            if a[j]<a[min]:
                min=j
        a[i],a[min]=a[min],a[i]
    return a

おすすめ

転載: blog.csdn.net/qq_44954371/article/details/126491683