2019/03/11 公開
・配列のソート
配列に格納されている値を大きい方から順番に、小さい方から順番に並び替えるプログラムを紹介します。
小さい値から大きい値に並び替えることを昇順ソートといいます。例えば、{8,3,6,1,7}の昇順ソートは{1,3,6,7,8}です。
大きい値から小さい値に並び替えることを降順ソートといいます。例えば、{8,3,6,1,7}の降順ソートは{8,7,6,3,1}です。
Sort1.java ← クリックしてダウンロードページに移動
001: import java.util.Arrays; 002: 003: public class Sort1 { 004: public static void main( String[] args ) { 005: // 配列aを宣言 006: int[] a; 007: 008: // 要素数10を設定 009: a = new int[ 10 ]; 010: 011: // 値を代入 012: a[ 0 ] = 13; 013: a[ 1 ] = 3; 014: a[ 2 ] = 54; 015: a[ 3 ] = 1; 016: a[ 4 ] = 9; 017: a[ 5 ] = 99; 018: a[ 6 ] = 43; 019: a[ 7 ] = 21; 020: a[ 8 ] = 78; 021: a[ 9 ] = 19; 022: 023: // 昇順ソート 024: Arrays.sort( a ); 025: 026: // 結果表示 027: for ( int i = 0; i < a.length; ++ i ) { 028: System.out.println( a[ i ] ); 029: } 030: } 031: }
Sort1の出力結果(昇順ソート)
1 3 9 13 19 21 43 54 78 99
この例では、Arraysクラスのsortメソッドを使って昇順ソートを行っています。
ソート Arrays.sortメソッド
public static int Arrays.sort( char[] a )
public static int Arrays.sort( double[] a )
public static int Arrays.sort( float[] a )
public static int Arrays.sort( int[] a )
public static int Arrays.sort( short[] a )
■指定された配列を数値の昇順でソートします。 パラメータ a : 昇順ソートする配列
次に、int型配列の降順ソートのプログラムの作り方を説明します。Arraysクラスのsortでint型の配列を降順ソートすることはできません。
そこで、Arraysクラスで降順ソートできるIntegerクラスの配列に、int型の値を一時的にコピーし、降順ソートの結果をint型に戻す方法を使っています。
Sort2.java ← クリックしてダウンロードページに移動001: import java.util.Arrays; 002: import java.util.Collections; 003: 004: public class Sort2 { 005: public static void main( String[] args ) { 006: // 配列aを宣言 007: int[] a; 008: 009: // 要素数10を設定 010: a = new int[ 10 ]; 011: 012: // 値を代入 013: a[ 0 ] = 13; 014: a[ 1 ] = 3; 015: a[ 2 ] = 54; 016: a[ 3 ] = 1; 017: a[ 4 ] = 9; 018: a[ 5 ] = 99; 019: a[ 6 ] = 43; 020: a[ 7 ] = 21; 021: a[ 8 ] = 78; 022: a[ 9 ] = 19; 023: 024: // int配列をInteger配列にコピー 025: Integer[] atemp = new Integer[ a.length ]; 026: for ( int i = 0; i < a.length; ++ i ) 027: atemp[ i ] = a[ i ]; 028: 029: // 降順ソート 030: Arrays.sort( atemp, Collections.reverseOrder() ); 031: 032: // Integer配列をint配列にコピー 033: for ( int i = 0; i < a.length; ++ i ) 034: a[ i ] = atemp[ i ]; 035: 036: // 結果表示 037: for ( int i = 0; i < a.length; ++ i ) { 038: System.out.println( a[ i ] ); 039: } 040: } 041: }
Sort2の出力結果(降順ソート)
99 78 54 43 21 19 13 9 3 1
024: // int配列をInteger配列にコピー 025: Integer[] atemp = new Integer[ a.length ]; 026: for ( int i = 0; i < a.length; ++ i ) 027: atemp[ i ] = a[ i ];
int型配列aと同じ数のIntergerクラスの配列atempを作成し、atempにaをコピーしています。
029: // 降順ソート 030: Arrays.sort( atemp, Collections.reverseOrder() );
Intergerクラスの配列atempを降順ソートしています。
コンパレータ Collections.reverseOrderメソッド
■Comparableインタフェースを実装するオブジェクトのコレクションで
自然順序付けの逆を義務付けるコンパレータを返します。 パラメータ : なし
ソート Arrays.sortメソッド
■指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。 パラメータ a : ソートする配列 c : コンパレータ
032: // Integer配列をint配列にコピー 033: for ( int i = 0; i < a.length; ++ i ) 034: a[ i ] = atemp[ i ];
ソートされたIntergerクラスの配列atempの値をaにコピーしています。
次も降順ソートの例ですが、Intgerクラスの配列を使わない方法です。
Sort3.java ← クリックしてダウンロードページに移動001: import java.util.Arrays; 002: 003: public class Sort3 { 004: public static void main( String[] args ) { 005: // 配列aを宣言 006: int[] a; 007: 008: // 要素数10を設定 009: a = new int[ 10 ]; 010: 011: // 値を代入 012: a[ 0 ] = 13; 013: a[ 1 ] = 3; 014: a[ 2 ] = 54; 015: a[ 3 ] = 1; 016: a[ 4 ] = 9; 017: a[ 5 ] = 99; 018: a[ 6 ] = 43; 019: a[ 7 ] = 21; 020: a[ 8 ] = 78; 021: a[ 9 ] = 19; 022: 023: // int配列を新規のint配列にコピー 024: int[] atemp = new int[ a.length ]; 025: for ( int i = 0; i < a.length; ++ i ) 026: atemp[ i ] = a[ i ]; 027: 028: // 昇順ソート 029: Arrays.sort( atemp ); 030: 031: // atempをa配列の後方からコピー 032: for ( int i = 0; i < a.length; ++ i ) 033: a[ i ] = atemp[ a.length - i - 1 ]; 034: 035: // 結果表示 036: for ( int i = 0; i < a.length; ++ i ) { 037: System.out.println( a[ i ] ); 038: } 039: } 040: }
Sort3の出力結果(降順ソート)
99 78 54 43 21 19 13 9 3 1
023: // int配列を新規のint配列にコピー 024: int[] atemp = new int[ a.length ]; 025: for ( int i = 0; i < a.length; ++ i ) 026: atemp[ i ] = a[ i ];
int型配列aと同じ数のint型列atempを作成し、atempにaをコピーしています。
028: // 昇順ソート 029: Arrays.sort( atemp );
031: // atempをa配列の後方からコピー 032: for ( int i = 0; i < a.length; ++ i ) 033: a[ i ] = atemp[ a.length - i - 1 ];
ソートされたint型の配列atempの値を後方からaにコピーしていきます。
ソートは昇順で行い、結果を降順にする方法です。この方法では、新規にatempというint型配列を使っていますが、昇順ソートされた配列の値の順番を入れ替える処理を使えば、新規に配列を作成する必要はありません。
■関連コンテンツ
Javaの配列 | 同じ型の変数をまとめた配列について解説 |
for文 | 繰り返し処理に使用するfor文について解説 |
変数値の交換 | 2つの変数値を交換する方法を解説 |
クイックソート | 高速に配列に並び替える方法 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告