ソートの基本

C:\DATA\Java2\Dos>java Sort1
2, 5, 7, 13, 15, 23, 30, 37, 50, 55,
 -- Press any key to exit (Input "c" to continue) --
配列に格納された10個のデータを昇順にソートして印字します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Sort1.java の名前で保存して下さい。
    class Sort1
    {   public static void main(String[] args)
        {   int     t[] = { 50,7,15,2,30,23,13,55,5,37 };
            int     i,j,w;
            for(i=0; i<9; i++)
                for(j=i+1; j<10; j++)
                    if (t[i]>t[j])
                    {   w= t[i];
                        t[i]= t[j];
                        t[j]= w;
                    }
            for(i=0; i<10; i++)
                System.out.print(t[i] + ", ");
            System.out.println("");
        }
    }
    
  2. Sort1.java をコンパイルして class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。

プログラムの説明

  1. ソート(並べ替え)の基本的な考え方は 小さい順に印字 を参照して下さい。
  2. このプログラムで採用している基本的なソートの考え方です。
    1. 配列 t[0] に t[0]〜t[9] の中から一番小さい値が格納されるように入れ替えます。
    2. 配列 t[1] に t[1]〜t[9] の中から一番小さい値が格納されるように入れ替えます。
    3. 配列 t[2] に t[2]〜t[9] の中から一番小さい値が格納されるように入れ替えます。
    4. 上記と同じ手順を t[3]〜t[8] に対して繰り返します。
    5. ループの最後の処理の確認です。
      t[8] と t[9] を比べて t[8] に小さい値が格納されるように入れ替えます。
    6. これで t[] に格納されている10件のデータが昇順に並びます。
  3. 外側のループは 0(t[0]) から 8(t[8]) でループします。
    上記の説明で小さい値を格納する左側の配列の添え字に相当します。
        for(i=0; i<9; i++)
        
  4. 内側のループは 配列 t[i] と比較する対象になる範囲を指定します。
    j の値は i+1 から始まることに注目して下さい。
            for(j=i+1; j<10; j++)
        
  5. t[i] と t[j] を比較して t[i] のほうが大きいときは入れ替えます。
                if (t[i]>t[j])
                {   w= t[i];
                    t[i]= t[j];
                    t[j]= w;
                }
        
  6. ソートが完了した配列 t[] を先頭から順に印字します。
            for(i=0; i<10; i++)
                System.out.print(t[i] + ", ");
        
  7. 超初心者のプログラム入門(C/C++/CLI)の「ソートの方法8通り」で8通りのソートの方法を説明しています。

【演習】

課題1

プログラムをトレースしてソートの方法を理解して下さい。

課題2

降順(大きい順)にソートして印字して下さい。

超初心者のプログラム入門(Java2)