ホームページ Java &#&チュートリアル 一般的な Java バブル ソート アルゴリズム: 昇順でソート

一般的な Java バブル ソート アルゴリズム: 昇順でソート

Jan 10, 2024 pm 12:30 PM
java バブルソート 一般的な書き方

一般的な Java バブル ソート アルゴリズム: 昇順でソート

Java バブル ソート: 小規模なものから大規模なものまで、いくつかの一般的な記述方法、具体的なコード例が必要です

バブル ソートは、隣接する 2 つの要素を繰り返し比較する単純なソート アルゴリズムです。シーケンス全体が順序付けされるまで、サイズ順序に従ってそれらを交換します。 Javaではバブルソートの一般的な記述方法や最適化方法がいくつかありますが、ここでは一般的な5つの記述方法と具体的なコード例を紹介します。

最初の書き方: 通常のバブル ソート

通常のバブル ソートは 2 レベルのループを直接ネストします。外側のループは比較のラウンド数を制御し、内側のループは特定の比較を実行します。そして交換します。

public static void bubbleSort1(int[] arr) {
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
ログイン後にコピー

2 番目の書き方: 外側のループの最適化

1 番目の書き方に基づいて、1 回のソートで交換が行われない場合は、配列がすでに格納されていることを意味します。ご注文及び仕分けは早期に終了する場合がございます。この最適化を実現するには、スワップが発生したかどうかを記録するフラグ ビットを追加します。

public static void bubbleSort2(int[] arr) {
    int n = arr.length;
    boolean swapped;
    for (int i = 0; i < n - 1; i++) {
        swapped = false;
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                swapped = true;
            }
        }
        if (!swapped) {
            break;
        }
    }
}
ログイン後にコピー

3 番目の記述方法: 内部ループの最適化

2 番目の記述方法に基づくと、比較の各ラウンドで最大の要素が最後まで「バブル」されることがわかります。したがって、ラウンドあたりの内部ループの比較の数を徐々に減らすことができます。

public static void bubbleSort3(int[] arr) {
    int n = arr.length;
    int lastSwapIndex;
    for (int i = 0; i < n - 1; i++) {
        lastSwapIndex = 0;
        for (int j = 0; j < n - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                lastSwapIndex = j + 1;
            }
        }
        i = n - lastSwapIndex - 2;
    }
}
ログイン後にコピー

4 番目の記述方法: 内部ループと外部ループの最適化

3 番目の記述方法に基づいて、特定のラウンドの比較で配列が交換されない場合は、配列の背後にある要素はすでに順序が整っているため、ソートを早期に終了できます。

public static void bubbleSort4(int[] arr) {
    int n = arr.length;
    int lastSwapIndex, rightBoundary;
    rightBoundary = n - 1;
    for (int i = 0; i < n - 1; i++) {
        lastSwapIndex = 0;
        for (int j = 0; j < rightBoundary; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                lastSwapIndex = j + 1;
            }
        }
        rightBoundary = lastSwapIndex;
        if (rightBoundary <= 1) {
            break;
        }
    }
}
ログイン後にコピー

5 番目の書き方: 外側のループと内側のループの最適化

4 番目の書き方に基づくと、各ラウンドの比較で最大の要素が見つかることがわかります。現在のラウンドを正しい場所に置きます。したがって、比較の各ラウンドで最大値と最小値の両方を見つけて並べ替えることができます。

public static void bubbleSort5(int[] arr) {
    int n = arr.length;
    int lastSwapIndex, leftBoundary, rightBoundary;
    leftBoundary = 0;
    rightBoundary = n - 1;
    while (leftBoundary < rightBoundary) {
        lastSwapIndex = 0;
        for (int j = leftBoundary; j < rightBoundary; j++) {
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                lastSwapIndex = j + 1;
            }
        }
        rightBoundary = lastSwapIndex;
        for (int j = rightBoundary; j > leftBoundary; j--) {
            if (arr[j] < arr[j-1]) {
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
                lastSwapIndex = j - 1;
            }
        }
        leftBoundary = lastSwapIndex;
    }
}
ログイン後にコピー

上記はバブルソートの一般的な記述方法を5つ挙げましたが、それぞれの記述方法で最適化方法が異なるため、実際に使用する場合は状況に応じて適切な記述方法を選択してください。これらの最適化により、バブルソーティングの効率が向上し、ソーティング時間を短縮できます。

バブル ソートは単純ですが、大規模なデータをソートする場合はパフォーマンスが低下します。したがって、実際のアプリケーションでは、クイック ソート、マージ ソートなどのより効率的なソート アルゴリズムがより一般的に使用されます。

以上が一般的な Java バブル ソート アルゴリズム: 昇順でソートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのアームストロング数 Javaのアームストロング数 Aug 30, 2024 pm 04:26 PM

Java のアームストロング番号に関するガイド。ここでは、Java でのアームストロング数の概要とコードの一部について説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

See all articles