国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ ウェブフロントエンド jsチュートリアル プロのようにソートアルゴリズムをマスターする

プロのようにソートアルゴリズムをマスターする

Oct 19, 2024 am 08:22 AM

これまでさまざまな並べ替えアルゴリズムについて説明してきましたが、今日は選択並べ替えアルゴリズムについて學(xué)びます。メモリに制約のある環(huán)境で可能な最小限のスワップを可能にする並べ替えアルゴリズム。

目次

  1. はじめに
  2. 選択ソートアルゴリズムとは何ですか?
  3. 選択の並べ替えはどのように機能しますか?
    • 時間計算量
    • 空間の複雑さ
  4. JavaScript での実裝
  5. leetCode の問題を解決する
  6. 結(jié)論

導(dǎo)入

選択ソートは、リストの未ソート部分から最小 (または最大) 要素を繰り返し選択し、それをソート済み部分の先頭 (または末尾) に移動する、シンプルかつ効果的なソート アルゴリズムです。このプロセスは、リスト全體がソートされるまで繰り返されます。この記事では、選択ソート アルゴリズム、JavaScript でのその実裝、および現(xiàn)実世界の問題解決におけるそのアプリケーションについて詳しく説明します。

Mastering Sort Algorithm like a PRO

選択ソートアルゴリズムとは何ですか?

選択ソート アルゴリズムは、インプレース比較ソート アルゴリズムです。入力リストを 2 つの部分に分割します:

  1. 左端のソート部分
  2. 右端の未整理部分

アルゴリズムは、未ソート部分から最小の要素を繰り返し選択し、それを左端の未ソート要素と交換し、ソート済み部分と未ソート部分の境界を 1 要素右に移動します。

選択の並べ替えはどのように機能しますか?

配列 [64, 25, 12, 22, 11] を使用した例を見てみましょう:

  1. 初期配列: [64, 25, 12, 22, 11]
  • ソート部分: []
  • 未ソート部分: [64, 25, 12, 22, 11]
  1. 最初のパス:
  • 未ソート部分の最小値を見つける: 11
  • 11 をソートされていない最初の要素 (64) と交換します
  • 結(jié)果: [11, 25, 12, 22, 64]
  • ソート部分: [11]
  • 未ソート部分: [25, 12, 22, 64]
  1. 2 番目のパス:
  • 未ソート部分の最小値を見つける: 12
  • 12 をソートされていない最初の要素 (25) と交換します
  • 結(jié)果: [11, 12, 25, 22, 64]
  • ソートされた部分: [11, 12]
  • 未ソート部分: [25, 22, 64]
  1. 3 番目のパス:
  • 未ソート部分の最小値を見つける: 22
  • 22 をソートされていない最初の要素 (25) と交換します
  • 結(jié)果: [11, 12, 22, 25, 64]
  • ソートされた部分: [11、12、22]
  • 未ソート部分: [25, 64]
  1. 4 番目のパス:
  • 未ソート部分の最小値を見つける: 25
  • 25 はすでに正しい位置にあります
  • 結(jié)果: [11, 12, 22, 25, 64]
  • ソートされた部分: [11、12、22、25]
  • 未ソート部分: [64]
  1. 最終パス:
    • 殘りの要素は 1 つだけです。自動的に正しい位置に配置されます
    • 最終結(jié)果: [11, 12, 22, 25, 64]

配列は完全にソートされました。

時間計算量

選択ソートの時間計算量は、すべてのケース (最良、平均、最悪) で O(n^2) です。ここで、n は配列內(nèi)の要素の數(shù)です。その理由は次のとおりです。

  • 外側(cè)のループは n-1 回実行されます
  • 外側(cè)のループの反復(fù)ごとに、內(nèi)側(cè)のループが n-i-1 回実行されます (i は外側(cè)のループの現(xiàn)在の反復(fù)です)

これにより、約 (n^2)/2 の比較と n 回のスワップが行われ、O(n^2) に単純化されます。

この二次時間計算量のため、選択並べ替えは大規(guī)模なデータセットに対して効率的ではありません。ただし、そのシンプルさとスワップの回數(shù)を可能な限り最小限に抑えるという事実により、特定の狀況、特に補助メモリが限られている場合には便利です。

空間の複雑さ

選択ソートは配列をその場でソートするため、空間複雑度は O(1) です。入力サイズに関係なく、一定量の追加メモリ空間のみが必要です。これによりメモリ効率が向上し、メモリに制約のある環(huán)境では有利になります。

JavaScriptでの実裝

これは、選択並べ替えアルゴリズムの 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));

コードを分解してみましょう:

  1. 配列を入力として受け取る関數(shù)selectionSortを定義します。
  2. 外側(cè)のループ (i) で配列を反復(fù)処理します。これは、ソートされた部分とソートされていない部分の境界を表します。
  3. 反復(fù)ごとに、ソートされていない最初の要素が最小であると想定し、そのインデックスを保存します。
  4. 次に、內(nèi)部ループ (j) を使用して、ソートされていない部分の実際の最小要素を見つけます。
  5. より小さい要素が見つかった場合は、minIndex を更新します。
  6. 最小値を見つけた後、必要に応じて、それをソートされていない最初の要素と交換します。
  7. 配列全體がソートされるまで、このプロセスを繰り返します。

LeetCode の問題の解決

選択ソート アルゴリズムを使用して、leetcode アルゴリズムの問??題を 1 つ解いてみましょう。しましょうか?

問題: 配列のソート [中]

問題: 整數(shù) num の配列を指定して、配列を昇順に並べ替えて返します。組み込み関數(shù)を使用せずに、O(nlog(n)) の時間計算量と可能な限り最小の空間計算量で問題を解決する必要があります。

アプローチ:: この問題を解決するには、選択並べ替えアルゴリズムを直接適用できます。これには、配列を反復(fù)処理し、未ソート部分で最小の要素を見つけて、それを最初の未ソート要素と交換することが含まれます。配列全體がソートされるまで、このプロセスを繰り返します。

解決策:

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 での大規(guī)模な入力の制限時間を超える可能性があることに注意してください。下の畫像は、解決策は正しいものの、効率的ではないことを示しています。

Mastering Sort Algorithm like a PRO

結(jié)論

結(jié)論として、Selection Sort は、並べ替え技術(shù)の世界への優(yōu)れた入門として機能する、シンプルで直感的な並べ替えアルゴリズムです。そのシンプルさにより、理解と実裝が容易となり、初心者にとって価値のある學(xué)習ツールとなっています。ただし、二次時間計算量が O(n^2) であるため、大規(guī)模なデータセットに対しては効率的ではありません。大規(guī)模なデータセットやパフォーマンスが重要なアプリケーションの場合は、QuickSort、MergeSort、または組み込みの並べ替え関數(shù)などのより効率的なアルゴリズムが推奨されます。



最新情報を入手してつながりを保つ

このシリーズのどの部分も見逃さないようにし、さらに詳しく知りたい場合は私と連絡(luò)を取ってください
ソフトウェア開発 (Web、サーバー、モバイル、またはスクレイピング / オートメーション)、データに関するディスカッション
構(gòu)造やアルゴリズム、その他のエキサイティングな技術(shù)トピックについては、フォローしてください:

Mastering Sort Algorithm like a PRO

素晴らしい解決策 ?

ソフトウェアエンジニア |テクニカルライター |バックエンド、Web およびモバイル開発者 ? |効率的でスケーラブルなソフトウェア ソリューションの作成に情熱を注いでいます。 #接続しましょう ?
  • GitHub
  • リンクトイン
  • X (Twitter)

コーディングを楽しみにしていてください ????

以上がプロのようにソートアルゴリズムをマスターするの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時間を操作する方法は? JSで日付と時間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時間を処理する場合は、次の點に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお勧めします。 2。時間情報を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお勧めします。これらの重要なポイントを習得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? JavaScriptアプリケーションのペイロードサイズをどのように削減できますか? Jun 26, 2025 am 12:54 AM

JavaScriptアプリケーションがゆっくりとロードされ、パフォーマンスが低い場合、問題はペイロードが大きすぎることです。ソリューションには、次のものが含まれます。1。コード分割(コードスプリッティング)を使用し、React.lazy()またはビルドツールを介して大きなバンドルを複數(shù)の小さなファイルに分割し、最初のダウンロードを減らすために必要に応じてロードします。 2。未使用のコード(Treeshaking)を削除し、ES6モジュールメカニズムを使用して「デッドコード」をクリアして、導(dǎo)入されたライブラリがこの機能をサポートしていることを確認します。 3.リソースファイルを圧縮してマージし、GZIP/BrotliとTerserがJSを圧縮できるようにし、ファイルを合理的にマージし、靜的リソースを最適化します。 4.頑丈な依存関係を交換し、day.jsやフェッチなどの軽量ライブラリを選択します

See all articles