Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java】ソートされていない2つの配列をマージしてソート済み配列を作成する方法

この記事では、ソートされていない2つの配列を1つにマージし、最終的に昇順にソートされた配列を作成するJavaプログラムを解説します。

処理の流れ

  1. ソートされていない2つの配列を用意する
  2. 両方の配列の要素数の合計と同じサイズの結果配列を作成する
  3. ループ処理で各配列の要素を結果配列へコピーする
  4. Arrays.sort() メソッドで結果配列を昇順にソートする

まず、ソートされていない2つの配列を用意しましょう。

int[] arr1 = new int[] {50, 22, 15, 40, 65, 75};
int[] arr2 = new int[] {60, 45, 10, 20, 35, 56};

次に、マージ結果を格納するための新しい結果配列を作成します。サイズは、両方の配列の長さを足した count1 + count2 とします。

int count1 = arr1.length;
int count2 = arr2.length;
int[] resArr = new int[count1 + count2];

続いて、whileループを使って、両方の配列の要素を先頭から順番に結果配列 resArr へコピーしていきます。

// arr1 の要素を resArr にコピー
while (i < arr1.length){
    resArr[k] = arr1[i];
    i++;
    k++;
}
// arr2 の要素を resArr にコピー
while (j < arr2.length){
    resArr[k] = arr2[j];
    j++;
    k++;
}

マージが完了したら、java.util.Arrays クラスの sort() メソッドを呼び出すだけで、配列全体を昇順に並べ替えられます。

それでは、ここまでの内容をまとめた完全なプログラムを見てみましょう。

完全なプログラム

import java.util.Arrays;

public class Demo {
    public static void main(String[] args) {
        // ソートされていない2つの配列
        int[] arr1 = new int[] {50, 22, 15, 40, 65, 75};
        int[] arr2 = new int[] {60, 45, 10, 20, 35, 56};

        System.out.println("1つ目の配列 = " + Arrays.toString(arr1));
        System.out.println("2つ目の配列 = " + Arrays.toString(arr2));

        int count1 = arr1.length;
        int count2 = arr2.length;

        // マージ結果を格納する配列
        int[] resArr = new int[count1 + count2];

        int i = 0, j = 0, k = 0;

        // arr1 の要素を resArr にコピー
        while (i < arr1.length) {
            resArr[k] = arr1[i];
            i++;
            k++;
        }

        // arr2 の要素を resArr にコピー
        while (j < arr2.length) {
            resArr[k] = arr2[j];
            j++;
            k++;
        }

        // マージした配列を昇順にソート
        Arrays.sort(resArr);

        System.out.println("ソート済みマージ配列 = " + Arrays.toString(resArr));
    }
}

実行結果

1つ目の配列 = [50, 22, 15, 40, 65, 75]
2つ目の配列 = [60, 45, 10, 20, 35, 56]
ソート済みマージ配列 = [10, 15, 20, 22, 35, 40, 45, 50, 56, 60, 65, 75]

ポイント解説

  • 配列のコピー: 2つのwhileループで、インデックス変数 k を共有しながら要素を順番に書き込むことで、2つの配列を1つに連結できます。
  • ソート: Arrays.sort(resArr) はプリミティブ型のint配列に対してクイックソート(双方向のクイックソート)を使用しており、高速に昇順ソートが可能です。
  • 表示: Arrays.toString() を使うと、配列の中身を [10, 15, 20] のような読みやすい形式で簡単に出力できます。

このように、まず単純にマージしてから Arrays.sort() でソートする方法は、コードがシンプルで理解しやすいため、実務でも広く使われる基本的なテクニックです。

  1. Pythonで2つの未ソートリストをマージしてソート済みリストを作成する方法

    このチュートリアルでは、2つのリストをマージし、その結果をソートされた順序で出力するPythonプログラムの作り方を解説します。数値のリストだけでなく、文字列のリストにも対応できる汎用的な方法なので、ぜひ最後までご覧ください。実現したいことまず、具体的な入力と出力の例を見てみましょう。例1:数値のリストの場合入力:list_1 = [1, 3, 2, 0, 3]list_2 = [20, 10, 23, 43, 56, -1]出力:[-1, 0, 1, 2, 3, 3, 10, 20, 23, 43, 56]例2:文字列のリストの場合入力:list_1 = [hafeez, aslan]lis

  2. Pythonで2つの未ソートのリストをマージしてソート済みリストを作成する方法

    ここでは、ユーザーが入力した2つのリストが与えられます。各リストの要素はソートされていない状態です。この記事の目的は、これら2つの未ソートのリストを1つにマージし、その後リスト全体を昇順に並べ替えることです。例入力: A[] = {100, 50, 150} B[] = {200, 30, 20} 出力: マージ後のリスト: {20, 30, 50, 100, 150, 200}アルゴリズムステップ1: まず、ユーザー入力による2つのリストを作成します。 ステップ2: 最終的なマージリストのサイズは「1つ目のリストのサイズ + 2つ目のリストのサイズ」になります。 ステップ3: s