ホームページ >ウェブフロントエンド >jsチュートリアル >プロのようにソートアルゴリズムをマスターする
これまでさまざまな並べ替えアルゴリズムについて説明してきましたが、今日は選択並べ替えアルゴリズムについて学びます。メモリに制約のある環境で可能な最小限のスワップを可能にする並べ替えアルゴリズム。
選択ソートは、リストの未ソート部分から最小 (または最大) 要素を繰り返し選択し、それをソート済み部分の先頭 (または末尾) に移動する、シンプルかつ効果的なソート アルゴリズムです。このプロセスは、リスト全体がソートされるまで繰り返されます。この記事では、選択ソート アルゴリズム、JavaScript でのその実装、および現実世界の問題解決におけるそのアプリケーションについて詳しく説明します。
選択ソート アルゴリズムは、インプレース比較ソート アルゴリズムです。入力リストを 2 つの部分に分割します:
アルゴリズムは、未ソート部分から最小の要素を繰り返し選択し、それを左端の未ソート要素と交換し、ソート済み部分と未ソート部分の境界を 1 要素右に移動します。
配列 [64, 25, 12, 22, 11] を使用した例を見てみましょう:
配列は完全にソートされました。
選択ソートの時間計算量は、すべてのケース (最良、平均、最悪) で O(n^2) です。ここで、n は配列内の要素の数です。その理由は次のとおりです。
これにより、約 (n^2)/2 の比較と n 回のスワップが行われ、O(n^2) に単純化されます。
この二次時間計算量のため、選択並べ替えは大規模なデータセットに対して効率的ではありません。ただし、そのシンプルさとスワップの回数を可能な限り最小限に抑えるという事実により、特定の状況、特に補助メモリが限られている場合には便利です。
選択ソートは配列をその場でソートするため、空間複雑度は O(1) です。入力サイズに関係なく、一定量の追加メモリ空間のみが必要です。これによりメモリ効率が向上し、メモリに制約のある環境では有利になります。
これは、選択並べ替えアルゴリズムの JavaScript 実装です:
function selectionSort(arr) { const n = arr.length; for (let i = 0; i < n - 1; i++) { let minIndex = i; // Find the minimum element in the unsorted portion for (let j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // Swap the found minimum element with the first unsorted element if (minIndex !== i) { [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]; } } return arr; } // Example usage const unsortedArray = [64, 25, 12, 22, 11]; console.log("Unsorted array:", unsortedArray); console.log("Sorted array:", selectionSort(unsortedArray));
コードを分解してみましょう:
選択ソート アルゴリズムを使用して、leetcode アルゴリズムの問題を 1 つ解いてみましょう。しましょうか?
問題: 整数 num の配列を指定して、配列を昇順に並べ替えて返します。組み込み関数を使用せずに、O(nlog(n)) の時間計算量と可能な限り最小の空間計算量で問題を解決する必要があります。
アプローチ:: この問題を解決するには、選択並べ替えアルゴリズムを直接適用できます。これには、配列を反復処理し、未ソート部分で最小の要素を見つけて、それを最初の未ソート要素と交換することが含まれます。配列全体がソートされるまで、このプロセスを繰り返します。
解決策:
function selectionSort(arr) { const n = arr.length; for (let i = 0; i < n - 1; i++) { let minIndex = i; // Find the minimum element in the unsorted portion for (let j = i + 1; j < n; j++) { if (arr[j] < arr[minIndex]) { minIndex = j; } } // Swap the found minimum element with the first unsorted element if (minIndex !== i) { [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]]; } } return arr; } // Example usage const unsortedArray = [64, 25, 12, 22, 11]; console.log("Unsorted array:", unsortedArray); console.log("Sorted array:", selectionSort(unsortedArray));
このソリューションは、以前に実装した選択並べ替えアルゴリズムを直接適用します。この問題は正しく解決されますが、選択並べ替えの時間の複雑さは O(n^2) であるため、この解決策は LeetCode での大規模な入力の制限時間を超える可能性があることに注意してください。下の画像は、解決策は正しいものの、効率的ではないことを示しています。
結論として、Selection Sort は、並べ替え技術の世界への優れた入門として機能する、シンプルで直感的な並べ替えアルゴリズムです。そのシンプルさにより、理解と実装が容易となり、初心者にとって価値のある学習ツールとなっています。ただし、二次時間計算量が O(n^2) であるため、大規模なデータセットに対しては効率的ではありません。大規模なデータセットやパフォーマンスが重要なアプリケーションの場合は、QuickSort、MergeSort、または組み込みの並べ替え関数などのより効率的なアルゴリズムが推奨されます。
このシリーズのどの部分も見逃さないようにし、さらに詳しく知りたい場合は私と連絡を取ってください
ソフトウェア開発 (Web、サーバー、モバイル、またはスクレイピング / オートメーション)、データに関するディスカッション
構造やアルゴリズム、その他のエキサイティングな技術トピックについては、フォローしてください:
コーディングを楽しみにしていてください ???
以上がプロのようにソートアルゴリズムをマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。