ホームページ >ウェブフロントエンド >jsチュートリアル >クイックソートアルゴリズムの解読: 数分で理論から実践まで
クイックソートは、最も高速な並べ替えアルゴリズムの 1 つです。これは値の配列を受け取り、その値の 1 つを「ピボット」要素として選択し、他の値を移動して、より低い値がピボット要素の左側に、より高い値がピボット要素の右側に配置されます。
クイック ソートは、アルゴリズムの世界で最もエレガントで効率的なソート アルゴリズムの 1 つです。バブル ソートや選択ソートのような単純なアルゴリズムとは異なり、クイック ソートは洗練された分割統治戦略を採用しており、実際の処理を大幅に高速化します。マージ ソートも分割統治を使用しますが、クイック ソートの独自のパーティショニング アプローチは、多くの場合、パフォーマンスとメモリ使用量の向上につながります。
平均時間計算量: O(n log n)
最悪の場合の時間計算量: O(n²)
空間の複雑さ: O(log n)
クイック ソートは、配列から「ピボット」要素を選択し、ピボットより小さいか大きいかに従って他の要素を 2 つのサブ配列に分割することで機能する、非常に効率的なソート アルゴリズムです。最初に分割して後で結合するマージ ソートとは異なり、クイック ソートはパーティショニング プロセス中にソートを実行します。
他の並べ替えアルゴリズムとの比較を検討してください:
Algorithm | Time Complexity (Average) | Space Complexity | In-Place? |
---|---|---|---|
Quick Sort | O(n log n) | O(log n) | Yes |
Merge Sort | O(n log n) | O(n) | No |
Bubble Sort | O(n²) | O(1) | Yes |
Selection Sort | O(n²) | O(1) | Yes |
Heap Sort | O(n log n) | O(1) | Yes |
クイック ソート アルゴリズムの JavaScript 実装に入る前に、たった 4 つの簡単な手順で単純な数値の配列を手動でソートすることで、アルゴリズムがどのように機能するかを段階的に理解しましょう。
クイックソートは、次の 4 つの簡単なステップに分けることができます。
- 配列からピボット要素を選択します。この要素は、リスト/配列の最初、最後、中間、またはランダムな要素である可能性があります。
- ピボットより小さいすべての要素が左側に配置され、ピボットより大きいすべての要素が右側に配置されるように配列を再配置します。
- ピボット要素が大きい値の最初の要素と交換して、ピボットが中央に来るようにします。
- 同じ操作をピボットの左右のサブ配列に再帰的に適用します。
これらの手順を実際の配列に適用してみましょう。しましょうか?
初期配列: [3, 6, 2, 7, 1]
すべてのサブ配列をソートした後、最終的にソートされた配列を取得します。
ソートされた配列: [1, 2, 3, 6, 7]
以下は、これが実際にどのように機能するかを示す最良の図です:
Quick Sort の時間計算量はピボットの選択によって異なります:
ベストケース (O(n log n)):
平均ケース (O(n log n)):
最悪の場合 (O(n²)):
Quick Sort の空間複雑さは次の理由により O(log n) です:
function quickSort(arr) { // Base case: arrays with length 0 or 1 are already sorted if (arr.length <= 1) return arr; // Helper function to swap elements const swap = (i, j) => { [arr[i], arr[j]] = [arr[j], arr[i]]; }; // Partition function using Lomuto's partition scheme function partition(low, high) { const pivot = arr[high]; let i = low - 1; for (let j = low; j < high; j++) { if (arr[j] <= pivot) { i++; swap(i, j); } } swap(i + 1, high); return i + 1; } // Main quickSort function implementation function quickSortHelper(low, high) { if (low < high) { const pivotIndex = partition(low, high); quickSortHelper(low, pivotIndex - 1); // Sort left side quickSortHelper(pivotIndex + 1, high); // Sort right side } } quickSortHelper(0, arr.length - 1); return arr; }
クイックソートは、その効率性とその場でのソートにより人気のある選択肢です。 O(n log n) の平均ケースのパフォーマンスと低いスペースの複雑さにより、バブル ソートや選択ソートなどの単純なアルゴリズムよりも優れたパフォーマンスを発揮します。
重要なポイント:
このシリーズのどの部分も見逃さないようにし、さらに詳しく知りたい場合は私と連絡を取ってください
ソフトウェア開発 (Web、サーバー、モバイル、またはスクレイピング / オートメーション)、データに関するディスカッション
構造やアルゴリズム、その他のエキサイティングな技術トピックについては、フォローしてください:
コーディングを楽しみにしていてください???
以上がクイックソートアルゴリズムの解読: 数分で理論から実践までの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。