Javaプログラミング学習サイト ゆるゆるプログラミング

・配列の並び替え

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

ここで紹介する並び替えは、配列乱数を使って作成しています。Java標準で用意されているCollections.shuffleは使っていません。

以下が並び替えのソースコード例で、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の値を表示しています。

■関連コンテンツ

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

■新着情報

2020.10.28 1からNの和 1+2+3+ … +N=?
2020.10.21 画像の上下反転 画像を上下反転する方法
2020.10.19 指定色の画素数取得 指定RGBの画素数は何個?
2020.10.13 2値化 その2 2値のBMP画像を作成
2020.10.07 3辺の長さで三角形かを判定 3辺abcで三角形が作れるか?
2020.10.06 画像のミラー反転 画像をミラー(鏡)反転する方法
2020.09.03 お札とコインの数 必要なお札と硬貨の枚数?

Topへ