2019.03.11

Javaプログラミング

ソート

ソート(sort)

配列に格納されている値を大きい方から順番に、小さい方から順番に並び替えるプログラムを紹介します。

小さい値から大きい値に並び替えることを昇順ソートといいます。
例えば、{8,3,6,1,7}の昇順ソートは{1,3,6,7,8}です。

昇順ソート例 : { 8, 3, 6, 1, 7 } → { 1, 3, 6, 7, 8 }

大きい値から小さい値に並び替えることを降順ソートといいます。
例えば、{8,3,6,1,7}の降順ソートは{8,7,6,3,1}です。

降順ソート例 : { 8, 3, 6, 1, 7 } → { 8, 7, 6, 3, 1 }

Javaソースコード - 昇順ソート

以下は、int型配列昇順ソートのプログラム例です。

Sort1.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
import java.util.Arrays;

public class Sort1 {
	public static void main( String[] args ) {
		// 配列aを宣言
		int[] a;

		// 要素数10を設定
		a = new int[ 10 ];

		// 値を代入
		a[ 0 ] = 13;
		a[ 1 ] =  3;
		a[ 2 ] = 54;
		a[ 3 ] =  1;
		a[ 4 ] =  9;
		a[ 5 ] = 99;
		a[ 6 ] = 43;
		a[ 7 ] = 21;
		a[ 8 ] = 78;
		a[ 9 ] = 19;

		// 昇順ソート
		Arrays.sort( a );

		// 結果表示
		for ( int i = 0; i < a.length; ++ i ) {
			System.out.println( a[ i ] );
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Sort1.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Sort1.java

実行

C:\talavax\javasample>java Sort1

出力結果

1
3
9
13
19
21
43
54
78
99

この例では、Arraysクラスのsortメソッドを使って昇順ソートを行っています。

次に、int型配列降順ソートのプログラムの作り方を説明します。Arraysクラスのsortでint型配列降順ソートすることはできません。

そこで、Arraysクラス降順ソートできるIntegerクラス配列に、int型の値を一時的にコピーし、降順ソートの結果をint型に戻す方法を使っています。

Javaソースコード - 降順ソート

以下は、int型配列降順ソートのプログラム例です。

Sort2.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
import java.util.Arrays;
import java.util.Collections;

public class Sort2 {
	public static void main( String[] args ) {
		// 配列aを宣言
		int[] a;

		// 要素数10を設定
		a = new int[ 10 ];

		// 値を代入
		a[ 0 ] = 13;
		a[ 1 ] =  3;
		a[ 2 ] = 54;
		a[ 3 ] =  1;
		a[ 4 ] =  9;
		a[ 5 ] = 99;
		a[ 6 ] = 43;
		a[ 7 ] = 21;
		a[ 8 ] = 78;
		a[ 9 ] = 19;

		// int配列をInteger配列にコピー
		Integer[] atemp = new Integer[ a.length ];
		for ( int i = 0; i < a.length; ++ i )
			atemp[ i ] = a[ i ];

		// 降順ソート
		Arrays.sort( atemp, Collections.reverseOrder() );

		// Integer配列をint配列にコピー
		for ( int i = 0; i < a.length; ++ i )
			a[ i ] = atemp[ i ];

		// 結果表示
		for ( int i = 0; i < a.length; ++ i ) {
			System.out.println( a[ i ] );
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Sort2.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Sort2.java

実行

C:\talavax\javasample>java Sort2

出力結果

99
78
54
43
21
19
13
9
3
1
024
025
026
027
		// int配列をInteger配列にコピー
		Integer[] atemp = new Integer[ a.length ];
		for ( int i = 0; i < a.length; ++ i )
			atemp[ i ] = a[ i ];

int型配列aと同じ数のIntergerクラス配列atempを作成し、atempにaをコピーしています。

029
030
		// 降順ソート
		Arrays.sort( atemp, Collections.reverseOrder() );

Intergerクラス配列atempを降順ソートしています。

032
033
034
		// Integer配列をint配列にコピー
		for ( int i = 0; i < a.length; ++ i )
			a[ i ] = atemp[ i ];

ソートされたIntergerクラス配列atempの値をaにコピーしています。

この方法でint型配列降順ソートを行うことができます。

Javaソースコード - 降順ソート(Integerクラスを使わない)

次も降順ソートの例ですが、Intgerクラス配列を使わない方法です。

Sort3.java

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
import java.util.Arrays;

public class Sort3 {
	public static void main( String[] args ) {
		// 配列aを宣言
		int[] a;

		// 要素数10を設定
		a = new int[ 10 ];

		// 値を代入
		a[ 0 ] = 13;
		a[ 1 ] =  3;
		a[ 2 ] = 54;
		a[ 3 ] =  1;
		a[ 4 ] =  9;
		a[ 5 ] = 99;
		a[ 6 ] = 43;
		a[ 7 ] = 21;
		a[ 8 ] = 78;
		a[ 9 ] = 19;

		// int配列を新規のint配列にコピー
		int[] atemp = new int[ a.length ];
		for ( int i = 0; i < a.length; ++ i )
			atemp[ i ] = a[ i ];

		// 昇順ソート
		Arrays.sort( atemp );

		// atempをa配列の後方からコピー
		for ( int i = 0; i < a.length; ++ i )
			a[ i ] = atemp[ a.length - i - 1 ];

		// 結果表示
		for ( int i = 0; i < a.length; ++ i ) {
			System.out.println( a[ i ] );
		}
	}
}

コンパイル ソースコードが「ANSI」の場合

C:\talavax\javasample>javac -encoding sjis Sort3.java

コンパイル ソースコードが「UTF-8」の場合

C:\talavax\javasample>javac Sort3.java

実行

C:\talavax\javasample>java Sort3

出力結果

99
78
54
43
21
19
13
9
3
1
023
024
025
026
		// int配列を新規のint配列にコピー
		int[] atemp = new int[ a.length ];
		for ( int i = 0; i < a.length; ++ i )
			atemp[ i ] = a[ i ];

int型配列aと同じ数のint型列atempを作成し、atempにaをコピーしています。

028
029
		// 昇順ソート
		Arrays.sort( atemp );

int型配列atempを昇順ソートしています。

031
032
033
		// atempをa配列の後方からコピー
		for ( int i = 0; i < a.length; ++ i )
			a[ i ] = atemp[ a.length - i - 1 ];

ソートされたint型配列atempの値を後方からaにコピーしていきます。

ソートは昇順で行い、結果を降順にする方法です。この方法では、新規にatempというint型配列を使っていますが、昇順ソートされた配列の値の順番を入れ替える処理を使えば、新規に配列を作成する必要はありません。

以上です。

関連コンテンツ

Javaの学習に役立つソースコードを多数紹介しています。是非、ご覧ください。

2022.09.10

プログラミングで使う変数って何?

2020.03.23

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたがあります。これが配列です。くわしくは、記事をご覧ください。

2016.01.14

同じ型の変数(データ)を複数個まとめて管理するデータの持ちかたで多次元配列というものがあります。くわしくは、記事をご覧ください。

2019.03.15

処理を繰り返すために使用するfor文について解説しています。

2020.03.23

ソート(並び替え)アルゴリズムの1つであるバブルソート(bubble sort)について詳しく解説しています。Javaのソースコード付きです。

2023.01.13

ソート(並び替え)アルゴリズムの1つであるクイックソートについて詳しく解説しています。Javaのソースコード付きです。

2019.09.06

画像フォーマット形式・色・大きさ・傾きなどの変更、特定の図形(文字・記号など)を見つけたり、取り出したりする画像処理について詳しく解説。

2015.11.29

プログラミング、ITに関する用語をまとめています。

2022.10.17

変数やクラスに格納されている値をコンソール出力する方法は?

2020.03.23

プログラムの最初に実行されるメソッドは?

2022.12.13

Javaのプログラムを書いてみませんか?プログラムの書き方をくわしく説明しています。

2020.03.23

「Javaソースコード」から実行可能な「オブジェクトコード」に変換する方法をくわしく説明しています。

2020.03.23

Javaプログラムの構成について解説しています。詳しくは、こちらをご覧ください。

2020.03.23

メソッドの定義方法を詳しく解説しています。Javaのサンプルソースコードを使った説明もあります。

2020.03.23

Integerクラスについて、ソースコードを使って詳しく説明しています。

2020.03.23

広告