こんにちは。ハンドルネーム「Javaを復習する初心者」です。このサイトはプログラミング言語Javaの復習・学習をするブログです。プログラムの開発・実行はEclipseで行ってます。
スポンサーリンク
お知らせ
  • 参考文献のページ作りました。
  • Amazon.co.jpアソシエイトに参加していますが、参考文献の紹介はもしもアフィリエイトに統一しました。
  • 2016年10月9日からは投稿ペースを落とします。週1回くらいにする予定です。
スポンサーリンク

int型配列のソート

こんにちは。「Javaを復習する初心者」です。今回は配列のソートについて書こうと思います。

Arraysクラスにsortメソッドが用意されてます。int型の場合、「static void sort(int[] a)」、「static void sort(int[] a, int fromIndex, int toIndex)」があります。API仕様書を見ると各数値型に対して同様のメソッドが用意されているようです。「static void sort(int[] a)」は引数に指定した配列を昇順でソートしてくれます。「static void sort(int[] a, int fromIndex, int toIndex)」は指定された範囲だけを昇順にソートしてくれます。

昇順

今回は要素数10個のint型配列にランダムに数値を入れてsortメソッドを使ってみました。

package arraysTest;
import java.util.Arrays;
import java.util.Random;

public class HelloSort {

    public static void main(String[] args) {

        int[] nums = new int[10];
        Random random = new Random();

        for (int i = 0; i < nums.length; i++) {
            nums[i] = random.nextInt(10);
        }

        System.out.println("ソート前");
        System.out.println(Arrays.toString(nums));

        Arrays.sort(nums);

        System.out.println("ソート前");
        System.out.println(Arrays.toString(nums));


    }

}
ソート前
[6, 4, 6, 9, 9, 5, 9, 0, 1, 8]
ソート前
[0, 1, 4, 5, 6, 6, 8, 9, 9, 9]

上記のように、昇順でソートされました。出力で使っているArrays#toStringメソッドは配列を[カンマ区切り]の形で出力してくれるメソッドのようです。

降順

さて、降順に並び替えるのはどうすれば良いのでしょうか。メソッドは用意されてないらしいので、sortメソッドで並び替えたあと、逆順にする方法を使えばよいのでしょう。以下、メソッドを作って実行してみました。

package arraysTest;
import java.util.Arrays;
import java.util.Random;

public class HelloSortDesc {

    public static void main(String[] args) {

        int[] nums = new int[10];
        Random random = new Random();

        for (int i = 0; i < nums.length; i++) {
            nums[i] = random.nextInt(100);
        }

        System.out.println("ソート前");
        System.out.println(Arrays.toString(nums));

        sortDesc(nums);

        System.out.println("ソート前");
        System.out.println(Arrays.toString(nums));


    }

    private static void sortDesc(int[] nums) {

        Arrays.sort(nums);

        int[] numsTemp = new int[nums.length];

        for (int i = 0; i < nums.length; i++) {
            numsTemp[i] = nums[nums.length - 1 - i];
        }

        for (int i = 0; i < nums.length; i++) {
            nums[i] = numsTemp[i];
        }

    }

}
ソート前
[12, 2, 51, 58, 58, 99, 34, 55, 85, 93]
ソート前
[99, 93, 85, 58, 58, 55, 51, 34, 12, 2]

単純に、一時的な配列に詰め込んで、元の配列に詰め込みなおしただけです。引数の配列を操作すると呼び出し元の引数の配列の内容も変わります。