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 "要素数を入力:"
* count = コンソール入力 (整数)
* if count が負の値
* print "要素数には0以上の値を入力してください"
* プログラムの終了
* values = 要素数 count の新しい配列 (int[])
* for i = 0 から values の長さ - 1 まで
* print "要素を入力"
* values[i] = コンソール入力 (整数)
* print "整列前の配列:", 改行
* print-array(values)
* sort(values)
* print "整列後の配列:", 改行
* print-array(values)
* </pre>
* @param args 無視される
* @throws IOException 入力時に例外が発生した場合
*/
// プログラム全体
public static void main(String[] args) throws 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 "{"
* if 配列の長さが 0 でない
* print a[0]
* for i を 1 から a の長さ - 1
* print ", "
* print a[i]
* print "}", 改行
* </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("}");
}
}
|