Java プログラミング スキル - データ構造とアルゴリズム「マージ ソート」

Java プログラミング スキル - データ構造とアルゴリズム「マージ ソート」

[[393503]]

基本的な紹介

マージソートは、マージの考え方を使用するソート方法です。このアルゴリズムは、古典的な分割統治戦略を採用しています(分割統治法では、問題をいくつかの小さな問題に分割してから再帰的に解決し、統治段階では分割された段階で得られた答えを「パッチ」でまとめます。つまり、分割統治です)。

概略図

注: この構造は完全な二分木に非常に似ていることがわかります。この記事では、再帰を使用してマージ ソートを実装します (反復的な方法で実装することもできます)。ステージは、サブシーケンスを再帰的に分割するプロセスとして理解できます。

処理段階を見てみましょう。2 つの順序付けられたサブシーケンスを 1 つの順序付けられたシーケンスにマージする必要があります。たとえば、下の図の最後のマージでは、2 つの順序付けられたサブシーケンス [4,5,7,8] と [1,2,3,6] を最終シーケンス [1,2,3,4,5,6,7,8] にマージする必要があります。実装手順を見てみましょう。

コードサンプル

  1. パッケージ com.structures.sort;
  2.  
  3. blic クラス MergeSort {
  4. 公共 静的void main(String[] args) {
  5. int [] arr = 新しいint [80000];
  6. ( int i = 0; i < 80000; i++) {
  7. arr[i] = ( int ) (Math.random() * 8000000);
  8. }
  9. int [] temp = 新しいint [arr.length];
  10. 長い開始 = System.currentTimeMillis();
  11.  
  12. マージソート(arr,0,arr.length-1, temp );
  13. 長い終了= System.currentTimeMillis();
  14. System.out.println ( "所要時間:" +((終了- 開始))+ "ミリ秒" );
  15. /*
  16. 所要時間: 15ms
  17. */
  18. }
  19.  
  20. //分離+組み合わせ
  21. 公共 静的void mergeSort( int [] arr, int   int   int [] temp ){
  22. <)の場合{
  23. int中央 = (+) / 2;
  24. //左に再帰的に分解する
  25. mergeSort(arr、 left 、mid、 temp );
  26. //右方向に再帰的に分解する
  27. mergeSort(arr, mid + 1, right , temp );
  28. //マージ
  29. マージ(arr、、中央、一時);
  30. }
  31. }
  32.  
  33. /**
  34. * マージ
  35. * @param arr ソートされた元の配列
  36. * @param left左順序シーケンスの初期インデックス
  37. * @param mid 中間インデックス
  38. * @param right右インデックス
  39. * @param tempは転送配列です
  40. */
  41. 公共 静的voidマージ( int []arr, int   int中央、 int   int [] temp ){
  42. int i = left ; // 左の順序付きシーケンスの初期インデックス i を初期化します
  43. int j = mid + 1; // 右側の順序付きシーケンスの初期インデックス j を初期化します
  44. int t = 0; //一時配列の現在のインデックスを指します
  45.  
  46. //(1つ)
  47. //まず、ルールに従って、左側と右側の(順序付けられた)データを一時配列に入力します
  48. //左側と右側の順序付けられたシーケンスの1つが処理されるまで、つまりすべてが一時配列に入力されるまで
  49. (i <= 中央 && j <=) の間 {
  50. // 左側の順序付けられたシーケンスが右側の順序付けられたシーケンスの現在の要素より小さいか等しい場合
  51. // 左側の現在の要素を一時配列にコピーします
  52. //次にt++、i++を後方に移動する
  53. もし(arr[i] <= arr[j]){
  54. temp [t] = arr[i];
  55. t += 1;
  56. 私 += 1;
  57. } else // 逆に、右側の順序付きシーケンスの現在の要素を一時配列に入力します
  58. temp [t] = arr[j];
  59. t += 1;
  60. 1 を越える
  61. }
  62. }
  63.  
  64. //(二)
  65. // 残りのデータをtempに順番に埋め込む 
  66. while (i <= mid){//左側にまだ残っているので、それを一時配列に入力します。
  67. temp [t] = arr[i];
  68. t += 1;
  69. 私 += 1;
  70. }
  71. (j <=) の間 {
  72. temp [t] = arr[j];
  73. t += 1;
  74. 1 を越える
  75. }
  76.  
  77. //(三つ)
  78. // temp配列の要素をarrにコピーします
  79. //毎回すべてがコピーされるわけではないことに注意してください
  80. // 最初のマージ leftTemp = 0、 right = 1、2 番目のマージ leftTemp = 2、 right = 3、3 番目のマージ leftTemp = 0、 right = 3...
  81. t = 0;
  82. int leftTemp =;
  83. (左温度<=){
  84. arr[左温度] =温度[t];
  85. 左温度 += 1;
  86. t += 1;
  87. }
  88. }

【編集者のおすすめ】

  1. Ubuntu Linux に Windows 10 をインストールする最も簡単な方法
  2. システムのハードウェア情報を表示するためによく使用される Linux コマンド 9 つ (例と詳細な説明付き)
  3. この記事では、なぜこれほど多くの人が暗号通貨に投機しているのかを説明します。
  4. 10万スターを獲得したGitHubオープンソースプロジェクト10選
  5. Excel さえも凌駕します! WPS のこれらの機能をご存知ですか?

<<:  AI、機械学習、ディープラーニングの解放

>>:  AIを使って古い写真をカラー化するのは本当に正確なのでしょうか?技術界と歴史界は1,000のポストを主張した

ブログ    
ブログ    

推薦する

40年前、袁龍平が田んぼで教えている姿はこんな感じです!ネットユーザーがAIを使って貴重な動画を復元し悲しみを表現

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Python 転移学習: 機械学習アルゴリズム

機械学習は、非常に幅広い領域をカバーする人工知能の人気のあるサブフィールドです。その人気の理由の 1...

人工知能の4つの主な種類を探る

人工知能(AI)は、環境、教育、医療などの重要な問題の解決に新たな可能性をもたらします。人工知能は、...

分析と AI で注意すべき 7 つの致命的な間違い

2017年、『エコノミスト』誌は、データが石油を上回り、世界で最も価値のある資源になったと宣言しまし...

OPPOのコアアーキテクチャとインテリジェント成長アルゴリズムの応用

1. 業界背景スマートフォン業界は、典型的なハードウェア製造業として、人々の生活に密接に関係していま...

AI著作権問題プラットフォームが有料化、Googleは将来的にGoogle Cloud向けに開始予定の「免責保護」サービスを紹介

グーグルは10月16日、今月13日に自社の生成AI製品のユーザーが当局によって保護されると発表した。...

NeurIPS 2023 入学結果が発表され、合格率は 26.1% でした

NeurIPS は世界で最も権威のある AI 学術会議の 1 つです。正式名称は Neural I...

...

なぜ記憶はAIの発展を妨げる問題となるのでしょうか?

エッジ コンピューティングのパフォーマンスの向上により、メモリの設計、タイプの選択、構成に課題が生じ...

AI ライティングの限界はどこにあるのでしょうか?

[[248875]]画像出典: Visual China本質的に、この記事は AI ライティングを...

オリンピックに乾杯! Baidu Smart Cloud と CCTV Sports Client が共同で新しいオリンピック放送体験を創造します。

[[416815]]東京オリンピックが閉幕しました。中国選手団は金メダル38個、銀メダル32個、銅...

...

...

企業におけるAIの応用は成熟段階に入ったのでしょうか?

マッキンゼーは、AI が多くの業務活動を自動化するという見通しに楽観的である一方で、あらゆる規模の自...

...