入門じゃないJava(9)

こんにちは!

今日も楽しくJavaを見ていきましょう。

前回は・・・配列ですね。

creators.hateblo.jp

今日も配列です。

 

配列を逆順に並び替える

配列の全要素を逆順に並び替えるプログラムを考えてみましょう。

逆順に並び替える時にはどうすればよいのでしょうか?

例えば、7つの要素を持つ配列を逆順に並び替える手順は下のように考えられます。

 

f:id:creators_plus:20170508154743p:plain

まず、図aのように先頭要素と末尾要素の値を交換します。

次にb, cのようにそれぞれ、一つ内側の要素を交換する作業を繰り返します。

一般に要素数がnの時、交換回数はn / 2回です。ここでの剰余は切り捨てます。

それは、要素数が奇数のとき、中央の要素を交換する必要がないからです。

したがって、要素数がnである配列の要素の並びを反転するアルゴリズムの概略は、

for (int i = 0; i < n /2; i++)

    //a[i] と a[n - i - 1]を交換する。

このアルゴリズムを使うと以下のようになります。

 

import java.util.Random;
import java.util.Scanner;

class ReverseArray {
    public static void main(String[] args) {
        Random rand = new Random();
        Scanner stdIn = new Scanner(System.in);

        System.out.print("要素数>");
        int n = stdIn.nextInt();
        int [] a = new int[n];

        for (int i = 0; i < n; i++) {
            a[i] = 10 + rand.nextInt(90);
            System.out.printf("a[%2d] = %2d\n", i, a[i]);
        }

        for (int i = 0; i < n / 2; i++) {
            int t = a[i];
            a[i] = a[n - i -1];
            a[n - i - 1] = t;
        }

        System.out.println("要素の並びを反転しました。");
        for (int i = 0; i < n; i++) 
            System.out.printf("a[%2d] = %2d\n", i, a[i]);
        
   }
}
×

実行結果

C:\Java\09>java ReverseArray
素数>5
a[ 0] = 51
a[ 1] = 83
a[ 2] = 59
a[ 3] = 94
a[ 4] = 42
要素の並びを反転しました。
a[ 0] = 42
a[ 1] = 94
a[ 2] = 59
a[ 3] = 83
a[ 4] = 51

C:\Java\09>_

 

 配列が逆順になっていることがわかりますね。

 

今回はここまで!

 

では!

 

 

参考文献

柴田 望洋 (2016) .『新・明解Java入門』198-199