Pythonの上のアルゴリズムをソート

  ソートコントラストのすべての種類

  最悪と最高の安定性の複雑希望複雑さの複雑さをソートする方法

  冒泡排序  稳定  O(n)O(n)O(n)  O(n2)O(n^2)O(n2)  O(n2)O(n^2)O(n2)

  选择排序  稳定  O(n2)O(n^2)O(n2)  O(n2)O(n^2)O(n2)  O(n2)O(n^2)O(n2)

  插入排序  稳定  O(n)O(n)O(n)  O(n2)O(n^2)O(n2)  O(n2)O(n^2)O(n2)

  クイック不安定O(N)O(N)O(N)O(N 2)O(N ^ 2)O(N 2)O(nlogn)O(nlogn)O(nlogn)

  ソート安定マージO(nlogn)O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(nlogn)O(nlogn)

  バブルソート

  核となるアイデアは、隣接する要素、スワップ場所のサイズを比較することです。

  具体的な手順は、外側ループおよび内側ループに分けることができます。

  アウターループ配列(昇順の場合)の端部に配列「シンク」で最大の要素の各ステップと

  サイクルの各ステップ隣接スワップのサイズの要素の位置。

  元の配列:[1,2,9,9,4,5,6,6,3,9,4]

  サイクルの最初のステップ:要素1と要素2を比較すると、無交換位置(ASC)。

  内側ループステップ:素子2と9を比較する要素、無交換位置と、

  第3の内部ループのステップ:比較要素9と素子9は、位置を交換しません。

  循環工程4:エレメント4と同等の9つの要素、交換位置[1,2,9,4,9,5,6,6,3,9,4]。

  循環工程5:エレメント5と同等9つの素子、スイッチング位置[1,2,9,4,5,9,6,6,3,9,4]。

  第6工程を循環:エレメント6と素子9を比較すると、交換位置[1,2,9,4,5,6,9,6,3,9,4]。

  ...

  サイクルの最後のステップ:要素6と同等の9つの要素、交換位置[1,2,9,4,5,6,6,3,9,4,9]であり;

  最初のステップは、アウターループサイクルが[1,2,9,4,5,6,6,3,9,4,9]のために、素子9の端部に沈むで生じます。

  【1,2,4,5,6,6,3,9,4,9,9]として、端部に第二素子9シンク;外側のループをステップ

  【1,2,4,5,6,3,6,4,9,9,9]として、端部に第三元素9シンク;外側のループをステップ

  アウターループ第四工程:最後に第三元素9シンク、[1,2,4,5,3,6,4,6,9,9,9]として;

  ...

  外側のループの最後のステップ:最終結果[1,2,3,4,4,5,6,6,9,9,9]。

  アルゴリズム

  バブルソートは安定ソートです。

  最適状況下で、アレイは、時間複雑度はO(n)O(N)O(N)の程度陽性です。

  最悪の場合の逆は、時間計算量はO(N 2)O(N ^ 2)O(N 2)。

  デフバブルソート(NUMS):

  lenの場合(NUMS)<2:

  リターンNUMS

  なぜなら、インデックスの後ろに#1は、比較対象に追加するので、ここでlenされる(NUMS) - 1

  範囲内のiについて(LEN(NUMS)-1):

  #-Iは私の要素が最後に沈むすでにあります

  範囲内のJ(LEN(NUMS)-i-1)のための:

  NUMS [J]> NUMS [J + 1]の場合:

  NUMS [J]、NUMS [J + 1] = NUM​​S [J + 1]、NUMS [J]

  リターンNUMS

  選択ソート

  核となるアイデアは、(端部で)最初に取り出された残りの要素(最大)の要素の最小です。

  具体的な手順:

  n個の要素、最小の要素を見つけるための最初の場所を横断します。

  残りのn-1個の要素、最小の要素を見つけるための最初の場所を横断します。

  整然と配列されるまで、上記の手順を繰り返します。

  アルゴリズム

  初期状態の時の複雑さに関係する選択ソートの何もない、されたO(N2)はO(n ^ 2)O(N2)。

  デフ選択ソート(NUMS):

  lenの場合(NUMS)<2:

  リターンNUMS

  範囲内のiについて(LEN(NUMS)-1):

  min_index = I

  範囲内のjについて(I + 1、(NUMS)LEN):

  もしNUMS [J] <NUMS [min_index]:

  min_index = J

  NUMS [min_index]、NUMS [I] = NUM​​S [I]、NUMS [min_index]

  リターンNUMS

  挿入ソート

  核となるアイデアは、すでに部分的に正しい位置を見つけ、配列を注文し、新しい要素を挿入しています。

  次のように具体的な手順は次のとおりです。

  開かれた二番目の配列要素から、前の要素、交換位置の大きさを決定します。

  第3の要素は、最初の2つの要素が正しい位置、第三の挿入要素を見つけるために、大きさによって順序付けされています。

  ように、すべての要素が所定の位置になるまで。

  アルゴリズム

  挿入ソート安定ソート、最適なケースであり、アレイが正である、時間複雑度は、O(N)O(N)O(N)です。最悪の場合の逆は、時間計算量はO(N 2)O(N ^ 2)O(N 2)。

  デフinsertSort(NUMS):

  lenの場合(NUMS)<2:

  リターンNUMS

  iについての範囲(1、LEN(NUMS))。

  値= NUM​​S [I]

  J = - 1

  J> = 0とNUMS [J]>値つつ。

  NUMS [J + 1] = NUM​​S [J]

  J - = 1

  NUMS [J + 1] =値

  リターンNUMS

  __name__ == "__main__" の場合:

  NUMS = [1,2,9,9,4,5,6,6,3,9,4]

  印刷(insertSort(NUMS))

  出力:[1、2、3、4、4、5、6、6、9、9、9]

  クイックソート

  核となるアイデアは、分割し、征服することです。次のように具体的な手順は次のとおりです。

  参考として、配列内の要素を選択すると、あなたは、任意の値をとるが、一般的に中央のヘルプを理解することができます。

  すべての配列は、大きなベースを右への参照に移動よりも、左側の基準ベンチマークの動きよりも小さい基準比較の配列です。

  参照サブアレイの両側に左サブアレイ素子まで、最初の2つのステップを繰り返す新しい配列として。

  ソートパーティションのアイデアは大規模なデータセットを処理する効果が優れている、パフォーマンスデータでいくつかの小さな違いが、スケールは挿入ソートに一定の時間スイッチに到達しました。

  アルゴリズム

  クイックドレーンがある不安定なソート、ある望ましい時間計算量はO(nlogn)O(nlogn)O(nlogn)、Oの最悪の場合の時間複雑度(N 2)O(N ^ 2)O(N 2)。

  ヤマガラ最もよく理解選択し、高速な行を達成するために:パーティション+再帰を。

  デフクイックソート(NUMS):

  lenの場合(NUMS)<2:

  リターンNUMS

  ミッド= NUM​​S [LEN(NUMS)// 2]

  左、右= []、[]

  nums.remove(ミッド)

  NUMSでnumの:

  NUM> =半ばの場合:

  right.append(NUM)

  他: 無錫ウィメンズ病院http://www.bhnnk120.com/

  left.append(NUM)

  クイックソート(左)+ [中期] +クイックソート(右)を返します

  __name__ == "__main__" の場合:

  NUMS = [1,2,9,9,4,5,6,6,3,9,4]

  印刷(クイックソート(NUMS))

  出力:[1、2、3、4、4、5、6、6、9、9、9]

  マージソート

  次のように並べ替えもパーティションの考え方を適用マージ、主な手順は次のとおりです。

  n個の要素の元の配列は、順序付けられたシーケンスとみなされます。

  ペアワイズは、順序付けられたシーケンスの長さを倍に、マージ。

  長さNの順序付けられたシーケンスになるまで上記の手順を繰り返し。

  それは見た図と組み合わせることができます。

  開始シーケンス[38、27、43、3、9、82、10]は長さ1の7つの配列に分割されます。

  ペアワイズマージ4に順序付けられたシーケンスを与えるために[27、38]、[3,43]、[9,82]、[10]。

  二十二は、二つの順序付けられたシーケンスを与えるために、再びマージ[3,27,38,43]、[9,10,82]。

  7 [3,9,10,27,38,43,82]の長さの最後のマージ順序付けられたシーケンスまで

  アルゴリズム

  ソートマージソート安定である、O(nlogn)O(nlogn)O(nlogn)は、好ましくは、最悪時の複雑さ、及び従って、望ましい複雑されているO(nlogn)O(nlogn)O(nlogn)。

  デフ(左、右)マージ:

  RESの= []

  I、J = 0、0

  私がlen(左)とj <ながら<(右)でlen:

  [i]は<=右[j]を放置すれば:

  res.append(左[i])と

  I + = 1

  他:

  res.append(右[J])

  J + = 1

  私は==(左)lenの場合:

  RES + =右[J:]

  他:

  左RES + = [I:]

  リターンRES

  デフマージソート(NUMS):

  場合でlen(NUMS)<= 1:戻りNUMS

  半ば= LEN(NUMS)// 2

  左=マージ(NUMS [:中間])

  右=マージソート(NUMS [半ば:])

  リターン・マージ(左、右)

  文言を簡素化

  二つのポインタの代わりに、.pop動作(.pop時間計算量はO(1)O(1)O(1))。

  左または右戻り、他方が空ではないので、必ずしも空の空であると判断されます。

  あなたが直接一緒にスプライスすることができますので、左と右の順。

  デフ(左、右)マージ:

  RESの= []

  左と右の間:

  左の場合[0] <=右の[0]:

  res.append(left.pop(0))

  他:

  res.append(right.pop(0))

  右+左リターンRES +

  デフマージソート(NUMS):

  場合でlen(NUMS)<= 1:戻りNUMS

  半ば= LEN(NUMS)// 2

  左=マージ(NUMS [:中間])

  右=マージソート(NUMS [半ば:])

  リターン・マージ(左、右)

  2019年7月15日サプリメント挿入ソート

  2019年7月16日サプリメントバブルソートは、比較表を増加させるために、選択します

  2019年7月30日のサプリメントは、マージソート


おすすめ

転載: blog.51cto.com/14503791/2432549