Javaを使用してマージソートアルゴリズムを実装する方法

王林
リリース: 2023-09-19 11:33:36
オリジナル
1193 人が閲覧しました

Javaを使用してマージソートアルゴリズムを実装する方法

Java を使用してマージ ソート アルゴリズムを実装する方法

はじめに:
マージ ソートは、分割統治法に基づいた古典的なソート アルゴリズムです。配列は層ごとに小さなサブ配列に分割され、その後、マージ操作によってサブ配列が順番に順序付けられた全体の配列にマージされます。この記事では、Java を使用してマージ ソート アルゴリズムを実装する方法と具体的なコード例を詳しく紹介します。

アルゴリズム ステップ:
マージ ソート アルゴリズムには主に、分割、マージ、並べ替えの 3 つのステップが含まれます。

  1. 分割:
    まず、並べ替える配列を、各サブ配列の要素が 1 つだけになるまで、レイヤーごとに小さなサブ配列に分割する必要があります。具体的な実装としては、再帰的な手法を用いて、配列の長さが1になるまで配列を2つに分割し続けることができます。
  2. マージ:
    次に、分割されたサブ配列をレイヤーごとにマージする必要があります。具体的な実装に関しては、一番下のサブ配列から開始して、2 つの隣接する順序付きサブ配列をマージして、新しい順序付きサブ配列を形成できます。次に、配列全体がマージされるまで、レイヤーごとに上向きにマージします。マージ操作では、ダブル ポインター メソッドを使用して、2 つの順序付けられたサブ配列の要素を順番に比較し、両方のサブ配列が走査されるまで、小さい方の要素を結果の配列に入れることができます。
  3. 並べ替え:
    最後に、マージが完了すると、配列全体が整います。アルゴリズムの時間計算量は、分割およびマージ操作の数、つまり再帰のレベルの数に依存します。具体的には、時間計算量は O(nlogn) です。ここで、n は配列の長さです。

Java コードの実装:
以下は、Java で書かれたマージ ソート アルゴリズムのサンプル コードです:

public class MergeSort {
    public static void merge(int[] arr, int left, int mid, int right) {
        int n1 = mid - left + 1;
        int n2 = right - mid;

        int[] L = new int[n1];
        int[] R = new int[n2];

        for (int i = 0; i < n1; ++i) {
            L[i] = arr[left + i];
        }
        for (int j = 0; j < n2; ++j) {
            R[j] = arr[mid + 1 + j];
        }

        int i = 0, j = 0;
        int k = left;
        while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                arr[k] = L[i];
                i++;
            } else {
                arr[k] = R[j];
                j++;
            }
            k++;
        }

        while (i < n1) {
            arr[k] = L[i];
            i++;
            k++;
        }

        while (j < n2) {
            arr[k] = R[j];
            j++;
            k++;
        }
    }

    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int mid = (left + right) / 2;
            mergeSort(arr, left, mid);
            mergeSort(arr, mid + 1, right);
            merge(arr, left, mid, right);
        }
    }

    public static void main(String[] args) {
        int[] arr = { 38, 27, 43, 3, 9, 82, 10 };
        mergeSort(arr, 0, arr.length - 1);

        System.out.println("归并排序后的数组为:");
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}
ログイン後にコピー

コード分析:
上記のサンプル コードは、マージソートアルゴリズム 分割、マージ、ソートの 3 つのステップ。このうち、merge() メソッドは 2 つの順序付けられた部分配列をマージするために使用され、mergeSort() メソッドは配列を再帰的に分割およびマージするために使用されます。 main() メソッドでは、並べ替える配列を渡すことによって mergeSort() メソッドを呼び出し、最終的に順序付けされた配列を取得できます。

概要:
マージ ソートは、最悪の場合でも優れたパフォーマンスを実現できる効率的な並べ替えアルゴリズムです。マージ ソートでは、並べ替える配列をレイヤーごとに分割および結合することで、任意の長さの配列を並べ替えることができます。実際のアプリケーションでは、マージ ソートを使用して大規模なデータの並べ替え問題を解決できます。

この記事が、マージ ソート アルゴリズムの理解と使用に役立つことを願っています。読んでいただきありがとうございます。

以上がJavaを使用してマージソートアルゴリズムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート