ゆるゆるプログラミング

・配列の並び替え

配列に格納されている数値をランダムに並び替えるプログラムを紹介します。

以下が並び替えのソースコード例で、1~10の数を並び替えています。乱数を使っているので実行の結果は毎回違います。

Shuffle.java
001:    public class Shuffle {
002:    	public static void main( String[] args ) {
003:    		// 配列を定義
004:    		int[] ary = new int[ 10 ];
005:    
006:    		// 配列に1からの連番を格納
007:    		for ( int i = 0; i < ary.length; ++ i ) ary[ i ] = i + 1;
008:    
009:    		// シャフル
010:    		for ( int i = 0; i < ary.length; ++ i ) {
011:    			// 0~(配列aryの個数-1)の乱数を発生
012:    			int rnd = (int)( Math.random() * (double)ary.length );
013:    
014:    			// ary[ i ]とary[ rnd ]を入れ替える
015:    			int w = ary[ i ];
016:    			ary[ i ] = ary[ rnd ];
017:    			ary[ rnd ] = w;
018:    		}
019:    
020:    		// 結果を表示
021:    		for ( int i = 0; i < ary.length; ++ i )
022:    			System.out.println( ary[ i ] );
023:    	}
024:    }

Shuffleの出力結果(1回目)

8
6
10
7
3
1
4
9
5
2

Shuffleの出力結果(2回目)

6
7
9
5
10
2
1
3
4
8

ここからは、このソースコードを上から順番に解説していきます。

001:    public class Shuffle {

クラス名を、Shuffleとしています。

002:    	public static void main( String[] args ) {

このmainメソッドからプログラムを実行します。

003:    		// 配列を定義
004:    		int[] ary = new int[ 10 ];
005:    
006:    		// 配列に1からの連番を格納
007:    		for ( int i = 0; i < ary.length; ++ i ) ary[ i ] = i + 1;

int型を10個格納できる配列を用意し、その配列に1~10の値を格納しています。

配列に1~10を順番に格納

009:    		// シャフル
010:    		for ( int i = 0; i < ary.length; ++ i ) {
011:    			// 0~(配列aryの個数-1)の乱数を発生
012:    			int rnd = (int)( Math.random() * (double)ary.length );
013:    
014:    			// ary[ i ]とary[ rnd ]を入れ替える
015:    			int w = ary[ i ];
016:    			ary[ i ] = ary[ rnd ];
017:    			ary[ rnd ] = w;
018:    		}

ary[ i ]と乱数で発生したrndの配列ary[ rnd ]の値を入れ替えます。全配列の値を乱数で発生した配列番号の値と入れ替えることで、まんべんなくシャフルされます。以下の図は、i=0rnd=6のときの配列の値の変化を表しています。ary[0]とary[6]の値が入れ替わります。

配列に1~10を順番に格納

020:    		// 結果を表示
021:    		for ( int i = 0; i < ary.length; ++ i )
022:    			System.out.println( ary[ i ] );

並び替った配列aryの値を表示しています。

■関連コンテンツ

配列 同じ型の変数をまとめた配列について解説
for文 繰り返し処理に使用するfor文について解説
乱数 random Math.randomの使い方について解説
変数値の交換 2つの変数値を交換する方法を解説

■新着情報

2017.11.17 N値化 カラー画像をN値化する方法について解説
2017.11.16 最も近い値の取得 指定値に最も近い配列の値を取得する方法を解説
2017.10.02 アルファ値(透過) アルファ値(透過)について

Topへ