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

2016/01/31 公開

・配列の並び替え

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

ここで紹介する並び替えは、配列乱数を使って作成しています。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の配列 同じ型の変数をまとめた配列について解説
トランプの操作 トランプを操作するクラス
神経衰弱 1人で神経衰弱
繰り返し処理に使用するfor文について解説-画像

for文

繰り返し処理に使用するfor文をJavaのソースコードを使って説明しています。

Math.randomの使い方について解説-画像

乱数 random

Math.randomメソッドを使って乱数を発生する方法を解説します。指定範囲の乱数の発生方法も解説しています。

2つの変数値を交換する方法を解説-画像

変数値の交換

2つの変数の値を入れ替える方法を紹介しています。

クラスによる変数値を交換する方法を解説-画像

値の交換クラス

クラスを使って2つの変数の値を入れ替える方法を紹介しています。

■新着情報

2022.07.07 外部プログラムの実行 exeファイル実行
2022.07.06 完全数 6=1+2+3

Topへ