ページ

2014/04/07

Javaで配列の逆順表示をやってみよう

今回は、配列の要素を逆順に表示してみたいと思います。

やり方が複数あるので、いくつか試してみようと思います。


まず、誰もが考える「そのまま逆順に表示すればいいんでしょ?」パターン

class reverse {
    public static void main(String[] args) {
        int[] a = {0,1,2,3,4,5,6,7,8,9};
        for(int i=a.length-1;i>=0;i--){
            System.out.print(a[i]+" ");
        }
        System.out.println();
    }
}

配列の一番後ろの要素から順に表示されるようにしているだけです。

次に「配列の要素を逆にしてもいいんでしょ?」パターン

class reverse2 {
    public static void main(String[] args) {
        int[] a = {0,1,2,3,4,5,6,7,8,9};
        int size = a.length;
        int[] b = new int[size];
        
        for(int i=0; size>0; i++) {
            b[i]=a[--size];
            System.out.print(b[i]+" ");
        }
        System.out.println();
    }
}

今ある配列と同じ要素数を持つ新しい配列を用意し、逆順に値を入れています。

最後に応用編

「for文を使わずに配列逆転をするには?」です。

再帰を使えば逆順にして表示することが出来ます。

class reverse3 {
    public static void main(String[] args) {
        int[] a = {0,1,2,3,4};
        reverseArray(a,a.length);
        System.out.print("start { ");
        for(int i:a)System.out.print(i+" ");
        System.out.println("} end");
    }
    static void reverseArray(int[] a, int n) {
        int l = a.length;
        int d = l-n;
        if((l/2)<(d+1))return;
        int t = a[d];
        a[d] = a[n-1];
        a[n-1] = t;
        reverseArray(a,n-1);
    }
}
フロー
・配列と要素数を引数にして“reverseArray()”へ
・“l”には配列の長さ、“d”には配列の参照位置が入る
・配列の半分を探索したなら再帰から脱出
・退避変数“t”に配列の要素“a[d]”を入れる
・“a[d]”には配列の逆位置にある“a[n-1]”の要素を入れる
・“a[n-1]”に退避変数“t”から“a[d]”の要素を入れれば交換完了
・配列と次の探索位置“n-1”を引数にして再帰的に“reverseArray()”へ


ループも再帰も使わない場合というのがあるらしいです。
他のサイトの方が説明しているのでこちらのサイト

0 件のコメント:

コメントを投稿