Java ソートアルゴリズムの概要 (V): マージソート

Java ソートアルゴリズムの概要 (V): マージソート

マージソートとは、2つ(またはそれ以上)の順序付きリストを新しい順序付きリストにマージすることです。つまり、ソートするシーケンスを複数のサブシーケンスに分割し、各サブシーケンスを順序付けます。次に、順序付けられたサブシーケンスを全体の順序付けられたシーケンスにマージします。

マージソートは、マージ操作に基づいた効果的なソートアルゴリズムです。このアルゴリズムは、分割統治法の非常に典型的な応用です。 順序付けられたサブシーケンスをマージして、完全に順序付けられたシーケンスを取得します。つまり、最初に各サブシーケンスを順序付けし、次にサブシーケンスのセグメントを順序付けます。 2 つの順序付きリストが 1 つの順序付きリストに結合される場合は、2 方向の結合と呼ばれます。

マージソートアルゴリズムは安定しています。配列の場合は O(n) の追加スペースが必要で、リンクリストの場合は O(log(n)) の追加スペースが必要です。時間の計算量は O(nlog(n)) です。このアルゴリズムは適応型ではなく、データのランダム読み取りを必要としません。

動作原理:

1. 2 つのソートされたシーケンスの合計と同じサイズになるようにスペースを申請します。このスペースは、結合されたシーケンスを格納するために使用されます。

2. 2 つのポインタを設定します。その初期位置は、ソートされた 2 つのシーケンスの開始位置になります。

3. 2つのポインタが指す要素を比較し、比較的小さい要素を選択してマージスペースに配置し、ポインタを次の位置に移動します。

4. ポインタがシーケンスの最後に到達するまで手順3を繰り返します。

5. 他のシーケンスの残りの要素をすべて、結合されたシーケンスの末尾に直接コピーします。

コード実装:

  1. 公共  voidマージソート(){
  2. long [] ワークスペース = new  長い[n要素];
  3. recMergeSort(ワークスペース、 0 、n要素 - 1 );
  4. }
  5. プライベート  void recMergeSort( long [] workSpace, int lowerBound, int upperBound){
  6. (下限値 == 上限値)の場合{
  7. 戻る;
  8. }
  9. それ以外{
  10. int mid=(lowerBound+upperBound)/ 2 ;
  11. recMergeSort(ワークスペース、lowerBound、mid);
  12. recMergeSort(ワークスペース、mid+ 1 、upperBound);
  13. マージ(ワークスペース、下限、中間+ 1 、上限);
  14. }
  15. }
  16. プライベート  void merge( long [] workSpace、 int lowPtr、 int highPtr、 int upperBound){
  17. 整数j = 0 ;
  18. int下限値 = lowPtr;
  19. int mid = highPtr - 1 ;
  20. int n = 上限 - 下限 + 1 ;
  21. (lowPtr<=mid&&highPtr<=upperBound)の場合{
  22. (配列[lowPtr]<配列[highPtr])の場合{
  23. ワークスペース[j++] = theArray[lowPtr++];
  24. }
  25. それ以外{
  26. ワークスペース[j++] = theArray[highPtr++];
  27. }
  28. }
  29. (lowPtr<=mid)の間{
  30. ワークスペース[j++] = theArray[lowPtr++];
  31. }
  32. (highPtr<=upperBound)の場合{
  33. ワークスペース[j++] = theArray[highPtr++];
  34. }
  35. (j= 0 ;j<n;j++)の場合{
  36. 配列[下限+j] = ワークスペース[j];
  37. }
  38. }

マージソートは比較的安定したソートです。つまり、同じ要素の順序は変わりません。例えば、入力レコードが 1(1) 3(2) 2(3) 2(4) 5(5) の場合(括弧内のキーワードはレコードのキーです)、出力 1(1) 2(3) 2(4) 3(2) 5(5) は入力順で 2 と 2 になります。これは、ソートするデータに複数の情報が含まれており、そのうちの 1 つの情報でソートし、他の情報はできるだけ入力順に並べたい場合に非常に重要です。これもクイックソートに対する利点です。

【編集者のおすすめ】

  1. 12.4.2 並列高速マージソート
  2. 12.4.1 シリアルマージとマージソート
  3. マージソートアルゴリズムのJAVA実装

<<:  Java ソートアルゴリズムの概要 (VI): ヒープソート

>>:  Javaソートアルゴリズムの概要(IV):シェルソート

ブログ    
ブログ    
ブログ    

推薦する

クラウド AI とエッジ AI: 2022 年にはどちらがより良い選択でしょうか?

エッジ AI とクラウド AI は、現在企業が使用している最も重要なテクノロジーの一部であることがわ...

...

自動運転は本当に実現します!最初の発砲は全国7か所で行われた。

自動車市場の発展に伴い、さまざまないわゆる「ブラックテクノロジー」が自動車所有者の敏感な神経をますま...

有名人の「ペイント肌」顔変更技術を悪用したいたずら合成AI動画の調査

[[265249]]新華社、上海、5月13日。AI技術の発展により、動画の顔を変える技術的ハードルが...

製造業の未来:AIGCとその他の先進技術

製造業とメタバースMetaverse テクノロジーを製造業に統合すると、企業の運営方法に革命をもたら...

数百万人の乗客を「迅速に配達」する人工知能の応用

ほとんどの人がテイクアウトを注文しており、今ではテイクアウトは中国人にとってもう一つの食事方法となっ...

...

ChatGPT に触発されて、Google DeepMind は 7100 万の遺伝子変異を予測します。 AIが人間の遺伝学を解読

タンパク質予測モデルAlphaFoldがAIの世界に津波のような波を起こした後、Alphaファミリー...

人工知能があなたの好きな家を見つけるお手伝いをします

潜在的な購入者が住宅を閲覧したり、オンラインで検索したりする際に、エージェントやブローカーによる物件...

モバイルロボットソフトウェアの自動テストの課題への対応

自動化されたモバイル ホーム ロボットの複雑さを探り、セットアップの特有の課題と制約の克服に焦点を当...

脳コンピューターインターフェースツール:脳波からテキストまで、必要なのは機械翻訳モデルだけ

[[320655]]この記事はLeiphone.comから転載したものです。転載する場合は、Leip...

業界の洞察 | スマート シティと省エネ通信インフラ

スマートグリッドはエネルギー配給と通信ネットワークに革命をもたらす以下では、スマートグリッドの主な特...

低迷期を経て復活を遂げ、人工知能の波が押し寄せている!

[51CTO.comより引用] 近年、コンピュータ技術は急速に発展しており、人工知能はその操作性と...

AIを活用した自動化はエンタープライズレベルの自動化2.0です

新たな常態に対応するために自動化プロセスを拡大多くの企業は、ニューノーマルに対処するための重要な技術...

シェア | 人工知能の典型的な12の事例

今日では AI の例が非常に多く存在するため、代表的な AI の事例をいくつか選択することは困難です...