Java ソートアルゴリズムの概要 (パート 3): バブル ソート

Java ソートアルゴリズムの概要 (パート 3): バブル ソート

バブル ソートは、計算時間が O(n^2) のコンピュータ ソート方法です。ヒープ ソートやクイック ソートの O(nlogn、基数 2) ほどではありませんが、次の 2 つの利点があります。

1. 「プログラミングの複雑さ」が非常に低く、コードを書くのが簡単です。

2. 安定しています。ここでの安定性とは、元のシーケンス内の同じ要素の相対的な順序がソートされたシーケンスでも維持されることを意味しますが、ヒープ ソートやクイック ソートは安定していません。

ただし、一方向および双方向のマージソートやアンバランスバイナリツリーソートはバブルソートよりも高速で安定性がありますが、ヒープソートやクイックソートほど高速ではありません。バブルソートは、n-1 ラウンドのサブソートによって完了します。i ラウンド目のサブソートは、1 番目の数字から ni 番目の数字までです。i 番目の数字が次の数字よりも大きい場合 (昇順、そうでない場合は降順)、2 つの数字が交換されます。

バブルソートアルゴリズムは安定しており、追加スペースは O(1)、比較と交換の時間計算量は O(n^2) です。これは適応型であり、基本的なソートアルゴリズムの時間計算量は O(n) です。バブル アルゴリズムには挿入アルゴリズムに類似した多くの特性がありますが、システム オーバーヘッドがわずかに高くなります。

選別プロセス

ソートされた配列 R [1..N] が垂直に立っていて、各データ要素が重さのあるバブルであると仮定します。軽いバブルは重いバブルの下には置けないという原則に従って、配列 R は下から上にスキャンされます。この原則に違反する軽いバブルが見つかると、そのバブルは上方に「浮かぶ」ようになります。このプロセスは、任意の 2 つのバブルの最も軽いバブルが上に、重いバブルが下にくるまで繰り返されます。

コード実装:

  1. // バブルソート
  2. パブリッククラスBubbleSort {
  3. パブリック静的voidソート(比較可能な[]データ) {
  4. // 配列の長さ
  5. int len ​​=データ.長さ;
  6. (int i = 0 ; i <  長さ- 1; i++) {
  7. // 一時変数
  8. 比較可能なtemp = null ;
  9. // スワップフラグ。false はスワップしないことを意味します
  10. ブール値isExchanged = false ;
  11. (int j = len - 1; j > i; j--) の場合 {
  12. // data[j]がdata[j - 1]より小さい場合は、
  13. if (data[j].compareTo(data[j - 1]) <   0 ) {
  14. temp =データ[j];
  15. データ[j] = データ[j - 1];
  16. データ[j - 1] = temp;
  17. // 交換が発生したため、交換フラグが true に設定されます
  18. isExchanged = true ;
  19. }// 終了
  20. }// 終了
  21. // このソートでは交換は発生しないため、効率を上げるためにアルゴリズムを早期に終了する
  22. 交換された場合
  23. 戻る;
  24. }// 終了
  25. }// 終了
  26. }// ソート終了
  27. パブリック静的voidメイン(String[] args) {
  28. // JDK1.5以降では、基本データ型は自動的にボックス化されます
  29. // intやdoubleなどの基本型のラッパークラスはComparableインターフェースを実装しています
  30. 比較可能[] c = { 4, 9, 23, 1, 45, 27, 5, 2 };
  31. ソート(c);
  32. (比較可能なデータ: c) {
  33. System.out.println(データ);
  34. }
  35. }
  36. }

バブルソートを使用して n 個のデータをソートするには、合計 n-1 回の比較が必要です。データが元々順序付けられている場合は、n-1 回の比較も必要になります。バブルソートのアルゴリズムは非常に単純で、効率が悪いです。

【編集者のおすすめ】

  1. PHPバブルソートのスキルの解釈
  2. バブルソートを実装するC#ソート関数の詳細な説明
  3. C++ バブルソート 基本的なアプリケーション スキルの共有
  4. VB.NET バブルソートアルゴリズムの詳細な説明

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

>>:  Java ソートアルゴリズムの概要 (II): 選択ソート

ブログ    

推薦する

ネットワークセキュリティ運用保守サービスにおける人工知能の応用

近年、国内外のサイバーセキュリティ情勢はますます複雑化しており、従来のモデルでは国民経済の生命線に関...

スマートホームデバイスにおける自然言語生成の応用

スマートホームデバイスへの自然言語生成 (NLG) の統合により、テクノロジーとのやり取りの方法に革...

表形式データでの機械学習に特徴抽出を使用する方法

データ準備の最も一般的なアプローチは、データセットを調査し、機械学習アルゴリズムの期待値を確認し、最...

機械学習がデータセンターを進化させる方法

1. はじめにビッグデータ革命によりデータセンターが爆発的に増加し、エネルギー消費量はますます増加し...

AIOps が IT 管理を変革する方法

世界がコロナウイルス危機の影響に取り組む中、業界団体は競合するネットワーク リソース、高まるユーザー...

iOS 18はAIネイティブシステムの第1世代となるか? AppleはAIをシステムに導入することを急いでおり、史上最大のアップデートを先導している。

著名なテクノロジー記者マーク・ガーマン氏によると、Appleはバグ修正に集中するため、iOS 18の...

データマイニングの専門家がプログラムアルゴリズムを使って人生の選択をする

[[118153]]毎年、就職活動の時期になると、どうやって内定を選んだらいいのか、テンセントに行く...

会話型AIを導入する際に考慮すべき6つの質問

会話型人工知能 (AI) プロジェクトを正常に展開することは、他のデジタル ビジネス プロセスのアッ...

CVPR2019で、Baidu Apolloはレベル4自動運転向けの純粋なビジョンソリューションであるApollo Liteを発表しました。

米国現地時間6月16日から20日まで、コンピュータビジョンとパターン認識の分野における世界有数の学術...

外国人の機械学習エンジニアは失業に直面しているのに、なぜ彼らはまだMLの学習にこだわるのでしょうか?

機械学習の分野では悲観的な見通しが広がっています。機械学習の人材の採用は減速しています。 [[334...

トランスフォーマー6周年:その年にNeurIPS Oralを受賞しなかった8人の著者が、いくつかのAIユニコーンを創設した

ChatGPTからAI描画技術まで、人工知能分野における最近の進歩はTransformerのおかげか...

スマートシティのスマートパーキング:建物が利益を上げる方法

スマートシティが到来します。人工知能 (AI)、拡張現実 (AR)、モノのインターネット (IoT)...