目次> 第13章> 13.2 TOPUPPREVNEXT

13.2 整数配列のソート

11.4 節の配列の初期値の設定例のプログラム Array5.java にソート処理を追加してみましょう。

18行目で、縦2行分の表示領域を確保します。 19〜21行目でソート前のデータを表示し、 33〜35行目でソート後のデータを表示しています。 23〜31行目は 13.1 節の説明の通りです。 組み合わせると以下のようになります。

01:/* 配列の宣言と初期化 およびソート */
02:
03:import java.awt.* ;
04:import java.awt.event.* ;
05:import javax.swing.* ;
06:
07:public class Sort2 {
08:
09:    public static void main(String args[]) {
10:
11:        int [] data = { 150, 120, 130, 110, 160, 100, 130 };
12:
13:        JFrame frame = new JFrame("配列のソート");
14:        frame.addWindowListener(new WindowAdapter() {
15:            public void windowClosing(WindowEvent e) { System.exit(0); }
16:        });
17:        Container pane = frame.getContentPane();
18:        pane.setLayout(new GridLayout(2, 0, 10, 10));
19:        for(int i=0; i<data.length; i++) {
20:            pane.add( new JLabel( String.valueOf(data[i]) ) );
21:        }
22:
23:        for(int sfrom=0; sfrom<data.length-1; sfrom++) {
24:            int max = sfrom;
25:            for(int i=sfrom+1; i<data.length; i++) {
26:                if(data[i] > data[max]) max = i;
27:            }
28:            int temp    = data[sfrom];
29:            data[sfrom] = data[max];
30:            data[max]   = temp;
31:        }
32:
33:        for(int i=0; i<data.length; i++) {
34:            pane.add( new JLabel( String.valueOf(data[i]) ) );
35:        }
36:
37:        frame.pack();
38:        frame.setVisible(true);
39:    }
40:}

プログラムの実行結果は、次のようになります。

ソースプログラム Sort2.java

縦に2列で、整列前、整列後を表示してみましょう。 たとえば次のように表示するには、プログラムのどこを変更すればよいのでしょう?

18行目で外側のフレームを2列にします。 縦1列のパネルを2つ用意し(19〜20行目)、 外側のフレームに貼り付けます(21〜22行目)。 JLabel を貼り付けるタイミングは同じです。 プログラム Sort2.java に対する変更箇所を赤の行番号で示します。

01:/* 配列の宣言と初期化 およびソート(縦に表示)*/
02:
03:import java.awt.* ;
04:import java.awt.event.* ;
05:import javax.swing.* ;
06:
07:public class Sort22 {
08:
09:    public static void main(String args[]) {
10:
11:        int [] data = { 150, 120, 130, 110, 160, 100, 130 };
12:
13:        JFrame frame = new JFrame("配列のソート");
14:        frame.addWindowListener(new WindowAdapter() {
15:            public void windowClosing(WindowEvent e) { System.exit(0); }
16:        });
17:        Container pane = frame.getContentPane();
18:        pane.setLayout(new GridLayout(0, 2, 10, 10));
19:        JPanel leftPanel  = new JPanel(new GridLayout(0, 1, 10, 10));
20:        JPanel rightPanel = new JPanel(new GridLayout(0, 1, 10, 10));
21:        pane.add(leftPanel);
22:        pane.add(rightPanel);
23:        for(int i=0; i<data.length; i++) {
24:            leftPanel.add( new JLabel( String.valueOf(data[i]) ) );
25:        }
26:
27:        for(int sfrom=0; sfrom<data.length-1; sfrom++) {
28:            int max = sfrom;
29:            for(int i=sfrom+1; i<data.length; i++) {
30:                if(data[i] > data[max]) max = i;
31:            }
32:            int temp    = data[sfrom];
33:            data[sfrom] = data[max];
34:            data[max]   = temp;
35:        }
36:
37:        for(int i=0; i<data.length; i++) {
38:            rightPanel.add( new JLabel( String.valueOf(data[i]) ) );
39:        }
40:
41:        frame.pack();
42:        frame.setVisible(true);
43:    }
44:}

ソースプログラム Sort22.java


更新日:2004-12-18 TOPUPPREVNEXT