一般的なソートアルゴリズムの実装のpython

一般的なソートアルゴリズムの実装のpython

以下のリンクを参照してください。https://www.cnblogs.com/shiluoliming/p/6740585.html

アルゴリズム(アルゴリズム)は、正確な問題解決ソリューションと完全な説明を参照し、問題を解決するための明確な一連の命令であり、このアルゴリズムは、体系的な方法で説明した問題を解決するためのポリシーメカニズムを表します。つまり、特定の仕様では、限られた時間内に必要な出力を得るために入力することができます。アルゴリズムは、欠陥、または問題に適していない場合は、このアルゴリズムの実装は、問題を解決することはできません。異なるアルゴリズムは、同じタスクを達成するために、異なる時間、空間や効率を使用することがあります。アルゴリズムの長所と短所は、測定の空間計算量と時間の複雑さを使用することができます。

このアルゴリズムは、以下の7つの重要な機能を持っている必要があります。

①有限抵抗(有限):実行されるアルゴリズムのステップ有限数の後に終了することができなければならない有限のアルゴリズムを指します。

②確実性(定性):アルゴリズムの各ステップは、正確な定義を有していなければなりません。

③エントリ(入力):0アルゴリズムまたは操作オブジェクトの初期状態を特徴付ける複数の入力、いわゆる0は入力の初期条件修正アルゴリズム自体を指します。

④出力項目(出力):このアルゴリズムは、入力データを処理した結果を反映するために、1つ以上の出力を有します。アルゴリズムの出力なしは意味がありません。

⑤実行可能性(有効性):計算ステップが実行される任意のアルゴリズムが、実質的に実行可能な操作ステップを分解することができる、すなわち、各計算ステップは、限られた時間の間(また、妥当性をいう)を行うことができます。

⑥効率(高効率):実行速度、小さなフットプリント。

⑦堅牢性(ロバスト性)に応答して、正しいデータ

 

インポートランダム
#冒泡排序
DEFバブルソート(L):
    アサート(タイプ(L)==タイプ([ '']))
    長さ= LEN(L)
    長さ<= 1の場合:
        戻りL 

    の範囲(長さ1でiについて)
        の範囲内のjについて(長-1-I):
            であればL [J] <L [J + 1]:
                L [J]、L [J + 1] = L [J + 1]、L [J] 

    リターンLの
#选择排序
DEF selectSort(L):
    アサート(タイプ(L)==タイプ([ '']))
    長さ= LEN(L)
    長さ<= 1の場合:
        戻りLの

    デフ_max(S):
        最大=秒
        :私は範囲(S、長さ)にするための
            L [i]が> L [最大]場合:
                最大= iが
        最大返します

    iの範囲(長さ)で:
        最大= _max(I)
        iの場合=最大:!
            L [i]は、L [最大] = L [最大]、L [i]は

    リターンLの

#插入排序
デフinsertSort(L):
    アサート(タイプ(L)==タイプ([ '']))
    長さ= LEN(L) 長さ<= 1の場合
        リターンL 

    の範囲でI(1、長さ):
        値= L [i]を
        J = I- 1 
        一方J> = 0とL [J] <値:
            L [J + 1] = L [J] 
            J- = 1 
        L [J + 1] =値
    戻りLの
#归并排序法
DEFマージ(1):
    長さ= LEN(L)
    長さ<= 1の場合:
        戻り、Lの
 
    NUM = INT(長さ/ 2)
    左側=マージ(1- [:NUM]) 
    右=マージ(L [NUM:]) 右、左)リターンマージ

DEF(右、左)マージ:
    L、R = 0,0 
    結果= [] 
    一方、L <LEN (左)とR <LEN(右):
        左の場合は、[L]>右[R]:
            result.append(左[L])
            L + = 1 
        さもなければ:
            result.append(右[R])
            R + = 1つの
    結果+ =左[L:] 
    結果+ =右[R:] 

    リターン結果

#快速排序
デフクイック(L、S、E):
    S <Eの場合:
        M =パーティション(L、S、E)
        クイックソート(L、S、M- 1)
        クイックソート(L、M + 1、e)に
    戻り、Lの

DEFパーティション(L、開始、終了)。
    ピボット= L [開始]  
    leftmark = 1 +開始
    rightmark =端
    真中:
        しばらくL [leftmark <=ピボット:
            もしleftmark == rightmark:
                ブレーク
            leftmark + = 1 
        Lながら[rightmark]>ピボット:
            rightmark- = 1 
        であればleftmark <rightmark:
            L [ leftmark]、L [rightmark] = 1 [rightmark]、Lは[leftmark] 
        他:
            ブレーク
    L []は開始、L [rightmark] = 1 [] rightmark、L []スタート
    リターンrightmarkの

LST = [random.randint(1、 10)の範囲内のxの(10)〕
プリント( 'の前にソート:'、LST)
プリント( 'クイックソート後:'、クイックソート(LST、0、LEN(LST)-1))
プリント( 'マージ後:'、マージソート(LST))
印刷( 'insertSort後:'、insertSort(LST))
プリント( 'selectSort後:'、selectSort(LST))
プリント( 'バブルソート後:'、バブルソート(LST))

  

おすすめ

転載: www.cnblogs.com/marszhw/p/10962712.html