並べ替えアルゴリズム
人間の発達において、私たちは数えることを学びました、例えば、私たちは今日Xiaoming Xiaomingが何匹のウサギを狩ったかを知っています。一方、どちらがより多くの狩猟を行っているかを判断する必要があり、比較する必要があります。
したがって、ソートの自然な必要性が出てきました。たとえば、Xiao Mingは5匹のウサギに当たり、Xiao Wangは8匹に当たり、他の部族からは100人以上の人々がいました。私たちはメリットの報酬について話し合う必要があります。
どのように分類するか、最短の時間で最も多くのウサギを打つ人を見つける方法、これは非常に単純な質問です。
長年の研究の結果、高速から低速まで、多くのソートアルゴリズムが登場しました。たとえば、次のとおりです。
- 挿入ソート:直接挿入ソートと丘ソート
- 選択ソート:直接選択ソートおよびヒープソート
- 交換ソート:バブルソートとクイックソート
それらの複雑さは次のとおりです。
安定性の概念
定義:2つの等しい数を保証できますソート後、シーケンスの前後の位置の順序は変更されません。(A1 = A2、A1はソート前はA2の前にあり、A1はソート後もA2の前にあります)
重要性:安定性の本質は、同じ属性を持つデータの挿入順序を維持することです。この挿入順序ソートを後で使用する必要がある場合、安定性ソートは今回はソートしないでください。
バブルソートは間違いなく最悪のソートアルゴリズムです。
主なソートアルゴリズムとして、バブルソート、直接選択ソート、直接挿入ソートを検討します。直接挿入ソートのパフォーマンスが最高です。一般的に、ソート配列がn
小さい場合、直接挿入ソートはどのソートよりも優れている場合があります。アルゴリズムは高速である必要があります。小規模なソートでのみ使用することをお勧めします。
ヒルソートは直接挿入ソートの改良版であり、直接選択ソートおよび直接挿入ソートよりも高速であり、このパフォーマンスの向上は、規模が大きくなるほど顕著になります。アルゴリズムは理解しやすいので、ソートされた配列が中程度のサイズの場合に使用できます。非常に大規模な場合、パフォーマンスはそれほど悪くありませんが、大規模な並べ替えには、次の高度な並べ替えアルゴリズムをお勧めします。
クイックソート、マージソート、ヒープソートは、より高度なソートアルゴリズムです。
現時点では、最も包括的な高度なソートアルゴリズムはクイックソートであると考えられており、クイックソートの平均時間は最も短く、ほとんどのプログラミングライブラリに組み込まれているソートアルゴリズムです。
ヒープの並べ替えも高速な並べ替えアルゴリズムであり、バイナリツリーを維持することで、ツリーのルートノードは常に最大または最小の並べ替えを実現します。
マージソートは、クイックソートと同じように分割統治法を使用して、最初に各サブシーケンスを再帰的に順序付け、次に2つの順序付けされたシーケンスを1つの順序付けされたシーケンスにマージします。
この章では、さまざまな並べ替えアルゴリズムについて説明します。
シリーズ記事エントリー
私は、スター陳思い、私が個人的に書かれているようこそ(Golangが達成)のデータ構造とアルゴリズムの記事で始まる、より親しみやすいGitBookを読むために。
- データ構造とアルゴリズム(Golang実装)(1)Golang-Prefaceの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(2)Golangパッケージ、変数、関数の簡単な紹介
- データ構造とアルゴリズム(Golang実装)(3)Golangフロー制御ステートメントの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(4)Golang構造とメソッドの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(5)Golangインターフェースの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(6)Golang並行性、コルーチン、チャネルの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(7)Golang標準ライブラリの簡単な紹介
- データ構造とアルゴリズム(Golang実装)(8.1)基本的な知識-序文
- データ構造とアルゴリズム(Golang実装)(8.2)基本的な知識-分割と征服と再帰
- データ構造とアルゴリズム(Golang実装)(9)基本的な知識アルゴリズムの複雑さとプログレッシブシンボル
- データ構造とアルゴリズム(Golang実装)(10)基本知識-アルゴリズムの複雑さの主な方法
- データ構造とアルゴリズム(Golang実装)(11)一般的なデータ構造-序文
- データ構造とアルゴリズム(Golang実装)(12)一般的なデータ構造にリンクされたリスト
- データ構造とアルゴリズム(Golang実装)(13)一般的なデータ構造-可変長配列
- データ構造とアルゴリズム(Golang実装)(14)一般的なデータ構造-スタックとキュー
- データ構造とアルゴリズム(Golang実装)(15)一般的なデータ構造-リスト
- データ構造とアルゴリズム(Golang実装)(16)一般的なデータ構造-辞書
- データ構造とアルゴリズム(Golang実装)(17)一般的なデータ構造ツリー
- データ構造とアルゴリズム(Golang実装)(18)ソートアルゴリズム-序文
- データ構造とアルゴリズム(Golang実装)(19)ソートアルゴリズム-バブルソート
- データ構造とアルゴリズム(Golang実装)(20)ソートアルゴリズム選択ソート
- データ構造とアルゴリズム(Golang実装)(21)ソートアルゴリズム挿入ソート
- データ構造とアルゴリズム(Golang実装)(22)ソートアルゴリズム-ヒルソート
- データ構造とアルゴリズム(Golang実装)(23)ソートアルゴリズム-マージソート
- データ構造とアルゴリズム(Golang実装)(24)ソートアルゴリズム-優先度キューとヒープソート
- データ構造とアルゴリズム(Golang実装)(25)ソートアルゴリズム-迅速なソート
- データ構造とアルゴリズム(Golang実装)(26)ルックアップアルゴリズム-ハッシュテーブル
- データ構造とアルゴリズム(Golang実装)(27)検索アルゴリズム-バイナリ検索ツリー
- データ構造とアルゴリズム(Golang実装)(28)検索アルゴリズム-AVLツリー
- データ構造とアルゴリズム(Golang実装)(29)検索アルゴリズム-2-3ツリーと左寄りの赤黒ツリー
- データ構造とアルゴリズム(Golangによって実装)(30)検索アルゴリズム-2-3-4ツリーと通常の赤黒ツリー