HOWTO · Java

Java で sort()メソッドを使わずに配列をソートする方法

sort()メソッドを使用せずに Java で配列をソートする方法を学ぶ

このページの内容

このガイドでは、sort() メソッドを使用せずに Java で配列をソートする方法を説明します。配列をソートするには、一般的に 3つの方法があります。これらの 3つのアルゴリズムは、任意の配列をソートするのに非常に効率的です。これらのアルゴリズムについてもっと学びましょう。

sort() メソッドを使用せずに Java で配列をソートする-バブルソート

最も単純なソートアルゴリズムであるバブルソートの概念を理解しましょう。基本的に、このアルゴリズムでは、配列内の隣接する要素を繰り返し交換します。それらが間違った順序である場合、アルゴリズムは 2つの要素を交換します。プレゼンテーションを参照します。

sort()メソッドを使用せずに Java で配列をソートする-バブルソート

上の写真を見ると、隣接する 2つの要素が入れ替わっていることがわかります。最後に、ソートされた配列ができました。混乱がある場合は、このバブルソートアルゴリズムのコードを見てください。

public class Main {
  public static void main(String[] args) {
    int[] arr = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    // Example Array To sort...
    for (int i = 0; i < arr.length; i++) { // Loop over java Array  outer Loop use
      for (int j = i + 1; j < arr.length; j++) { // Loop over java array
        int tmp = 0; // tempraory variable in order to compare.
        if (arr[i] > arr[j]) { // compare outer loop object with inner loop
          tmp = arr[i]; // if greater than swapping.
          arr[i] = arr[j]; // Swaping code here.
          arr[j] = tmp;
        }
      }
    }
    // After Sorting Printing The Value.............

    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
  }
}

出力:

3
4
5
8
32
95
172
564
754
768
859
1500

外側のループは配列を通過するためだけのものであり、内側のループは各パスで隣接する順序付けされていない要素を交換します。最後のパスの終わりに、ソートされた配列が残ります。

sort() メソッドを使用せずに Java で配列をソート-選択ソート

選択ソートアルゴリズムは、配列内の最小要素を検索し、それを配列の先頭に配置することで機能します。パスごとに、次に小さい要素を見つけて次に配置します。最終的に、2つのサブ配列を持つ配列を取得します。1つのサブ配列は、配列の先頭にあるソートされた配列です。他のサブ配列はソートされていないものです。

各パスで、昇順で移動します。最初に最大の要素を見つける場合は、降順で移動します。下の図を見てください。

sort()メソッドを使用せずに Java で配列をソートする-選択ソート

上の図では、動きは降順であり、最初に最大の要素を見つけて最後に配置しています。プレゼンテーションでは、上で説明したように、アレイが 2つのサブアレイに分割されています。

public class Main {
  public static void main(String[] args) {
    int[] arr1 = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    int small = -1; // at start there is no small  number....
    for (int i = 0; i < arr1.length; i++) {
      small = i;
      for (int j = i; j <= arr1.length - 1; j++) {
        if (arr1[j] < arr1[small]) {
          small = j;
        }
        // swap values
      }
      int temp = arr1[i];
      arr1[i] = arr1[small];
      arr1[small] = temp;
    }

    for (int i = 0; i < arr1.length; i++) {
      System.out.println(arr1[i]);
    }
  }
}

上記のコード例では、外側のループは配列を通過するように機能します。内側のループは、最小の要素を現在のインデックスの要素と交換します。

sort() メソッドを使用せずに Java で配列をソートする-挿入ソート

挿入ソートは、配列のソートに使用できるもう 1つの単純なソートアルゴリズムです。このアルゴリズムでは、指定された配列も 2つのサブ配列に分割されます。ただし、選択ソートとは異なり、要素はソートされていないサブ配列から選択され、正しい位置に配置されます。下の写真の説明を見てください。

sort()メソッドを使用せずに Java で配列をソートする-挿入ソート

ご覧のとおり、隣接する要素間でスワップしていません。最小の要素を見つけて正しい位置に配置するだけです。最初の要素から繰り返し、最後に向かって進みます。要素はその前の要素と比較され、次に適切な場所が見つかるまでその隣の要素と比較されます。提供された例では、2 が正しい位置に配置される前に 4 回比較されていることがわかります。これがコード例です。

public class Main {
  public static void main(String[] args) { // Insertion Sort....
    int[] arr2 = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    int number = arr2.length;
    for (int a = 1; a < number; a++) {
      int keyValue = arr2[a];
      int b = a - 1;
      while (b >= 0 && arr2[b] > keyValue) {
        arr2[b + 1] = arr2[b];
        b = b - 1;
      }
      arr2[b + 1] = keyValue;
    }
    // printing inserion sort............................
    for (int i = 0; i < arr2.length; i++) {
      System.out.println(arr2[i]);
    }
  }
}

これらは、sort 関数を使用せずに Java で配列をソートするために使用できる 3つの方法です。