解答例 - j1.lesson11.BubbleSort

package j1.lesson11;

import java.io.*;

/**
 * 課題1104 - 解答例.
 @author s.arakawa
 @version $Id: BubbleSort_java.rps,v 1.1 2006/03/06 12:56:14 java2005 Exp $
 */
public class BubbleSort {

    /**
     * コンソールに整数をいくつか入力して、その整数を昇順に並べて表示するプログラム。
     * 以下の擬似コードで表される。
     <pre>
     * プログラム全体
     *     print &quot;要素数を入力:&quot;
     *     count = コンソール入力 (整数)
     *     if count が負の値
     *         print &quot;要素数には0以上の値を入力してください&quot;
     *         プログラムの終了
     *     values = 要素数 count の新しい配列 (int[])
     *     for i = 0 から values の長さ - 1 まで
     *         print &quot;要素を入力&quot;
     *         values[i] = コンソール入力 (整数)
     *     print &quot;整列前の配列:&quot;, 改行
     *     print-array(values)
     *     sort(values)
     *     print &quot;整列後の配列:&quot;, 改行
     *     print-array(values)
     </pre>
     @param args 無視される
     @throws IOException 入力時に例外が発生した場合
     */
    // プログラム全体
    public static void main(String[] argsthrows IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // print "要素数を入力:"
        System.out.print("要素数を入力:");

        // count = コンソール入力 (整数)
        int count = Integer.parseInt(reader.readLine());

        // if count が負の値
        if (count < 0) {
            // print "要素数には0以上の値を入力してください"
            System.out.println("要素数には0以上の値を入力してください");

            // プログラムの終了
            return;
        }

        // values = 要素数 count の新しい配列 (int[])
        int[] values = new int[count];

        // for i = 0 から values の長さ - 1 まで
        for (int i = 0; i < values.length; i++) {
            // print "要素を入力:"
            System.out.print("要素を入力:");

            // values[i] = コンソール入力 (整数)
            values[i= Integer.parseInt(reader.readLine());
        }

        // print "整列前の配列:", 改行
        System.out.println("整列前の配列:");

        // print-array(values)
        printArray(values);

        // sort(values)
        sort(values);

        // print "整列後の配列:", 改行
        System.out.println("整列後の配列:");

        // print-array(values)
        printArray(values);
    }

    /**
     * 配列を昇順にソートする。 この操作によって、引数に与えられた配列の各要素がソートされる。
     * 以下の擬似コードで表される。
     <pre>
     * sort(a)
     *     for i を 0 から a の長さ - 2 まで
     *         for j を (a の長さ - 2) から i まで
     *             if a[j] が a[j+1] よりも大きい
     *                 a[j] と a[j+1] の値を入れ替える
     </pre>
     @param a ソートする配列
     */
    public static void sort(int[] a) {
        // for i を 0 から a の長さ - 2 まで
        for (int i = 0; i < a.length - 1; i++) {
            // for j を (a の長さ - 2) から i まで
            for (int j = a.length - 2; j >= i; j--) {
                // if a[j] が a[j+1] よりも大きい
                if (a[j> a[j + 1]) {
                    // a[j] と a[j+1] の値を入れ替える
                    swap(a, j, j + 1);
                }
            }
        }
    }

    /**
     * 指定した配列の指定した2つの要素を交換する。 
     * この操作によって、引数に指定した配列の要素が変化する。 
     * 以下の擬似コードで表される。
     <pre>
     * swap(a,i,j)
     *     old = a[i]
     *     a[i] = a[j]
     *     a[j] = old
     </pre>
     @param a 交換を行う対象の配列
     @param i 交換する要素の番号 1
     @param j 交換する要素の番号 2
     */
    public static void swap(int[] a, int i, int j) {
        int old = a[i];
        a[i= a[j];
        a[j= old;
    }

    /**
     * 配列の各要素を大括弧で括った後にカンマ区切りで出力する。
     * 以下の擬似コードで表される。
     <pre>
     * print-array(a)
     *     print &quot;{&quot;
     *     if 配列の長さが 0 でない
     *         print a[0]
     *         for i を 1 から a の長さ - 1
     *             print &quot;, &quot;
     *             print a[i]
     *     print &quot;}&quot;, 改行
     </pre>
     @param a 出力する配列
     */
    // print-array(a)
    public static void printArray(int[] a) {
        // print "{"
        System.out.print("{");

        // if 配列の長さが 0 でない
        if (a.length != 0) {
            // print a[0]
            System.out.print(a[0]);
            // for i を 1 から a の長さ - 1
            for (int i = 1; i < a.length; i++) {
                // print ", "
                System.out.print(", ");
                // print a[i]
                System.out.print(a[i]);
            }
        }
        // print "}", 改行
        System.out.println("}");
    }
}