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

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

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

Oct 19, 2024 am 08:22 AM

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

目次

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

導(dǎo)入

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

Mastering Sort Algorithm like a PRO

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

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

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

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

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

配列 [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 つだけです。自動(dòng)的に正しい位置に配置されます
    • 最終結(jié)果: [11, 12, 22, 25, 64]

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

時(shí)間計(jì)算量

選択ソートの時(shí)間計(jì)算量は、すべてのケース (最良、平均、最悪) で 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) に単純化されます。

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

空間の複雑さ

選択ソートは配列をその場でソートするため、空間複雑度は 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)) の時(shí)間計(jì)算量と可能な限り最小の空間計(jì)算量で問題を解決する必要があります。

アプローチ:: この問題を解決するには、選択並べ替えアルゴリズムを直接適用できます。これには、配列を反復(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));

このソリューションは、以前に実裝した選択並べ替えアルゴリズムを直接適用します。この問題は正しく解決されますが、選択並べ替えの時(shí)間の複雑さは O(n^2) であるため、この解決策は LeetCode での大規(guī)模な入力の制限時(shí)間を超える可能性があることに注意してください。下の畫像は、解決策は正しいものの、効率的ではないことを示しています。

Mastering Sort Algorithm like a PRO

結(jié)論

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



最新情報(bào)を入手してつながりを保つ

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

Mastering Sort Algorithm like a PRO

素晴らしい解決策 ?

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

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

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

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、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

強(qiáng)力な 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で日付と時(shí)間を操作する方法は? JSで日付と時(shí)間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時(shí)間を処理する場合は、次の點(diǎn)に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお?jiǎng)幛幛筏蓼埂?2。時(shí)間情報(bào)を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動(dòng)でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお?jiǎng)幛幛筏蓼埂¥长欷椁沃匾圣荪ぅ螗趣蛄?xí)得すると、一般的な間違いを効果的に回避できます。

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? 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

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

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

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)ストリングリムムット、使用率が有用であること

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語です。 2。JavaScriptは動(dòng)的なタイプと解釈された言語であり、主にWebインタラクションとフロントエンド開発に使用されます。

See all articles