プログラム
// InsertionSortMain.java
class InsertionSortMain {
static int a []; // ソートする対象を置く配列
static int length = 11; // 配列の長さ (初期値)
static InsertionSort iSort; // ソートオブジェクト変数
public static void main (String args[]) { // ここから実行が始まる
if (args.length != 0) { // コマンドの引数を配列の長さに設定
length = new Integer(args[0]).intValue() + 1;
}
a = new int[length]; // 配列を作成
iSort = new InsertionSort(); // 挿入ソートオブジェクトの生成
initialize(); // 配列の初期値設定
print("befor"); // ソートする対象の表示
iSort.sort(); // ソートの実行
print("after"); // ソート結果の表示
}
static void initialize() { // 配列の初期値設定メソッド
for (int i = 1; i < length; i++) { // 乱数を使って配列の値設定を行う
a[i] = (int) (length * 100 * Math.random());
}
iSort.set(a); // ソートオブジェクトに配列値を設定
}
static void print(String string) { // 配列要素値の表示メソッド
a = iSort.get(); // ソートオブジェクトから配列値を獲得
System.out.println(string + ": "); // 値の表示
for (int i = 1; i < length; i++) {
System.out.println("" + a[i] + " ");
}
System.out.println();
}
}
/* 挿入ソート */
class InsertionSort {
int a []; // ソートする要素をおく配列
void sort() { // 挿入ソート(昇順)
int work, j;
for (int i = 2; i < a.length; i++) {
work = a[i]; // a[i]に注目
a[0] = work; // 番兵の設定
j = i - 1; // a[i-1]を比較対象にする
while (work < a[j]) { // workより値が大きい間続ける
a[j + 1] = a[j]; // workより値が大きい物を一つ後ろに移動
j = j - 1; // a[j-1]を次の比較対象にする
}
a[j + 1] = work; // workの値を挿入
}
}
void swap(int i, int j) { // 要素の交換
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
void set (int [] a) { // 配列への値設定
this.a = a;
}
int [] get() { // 配列を返す
return(a);
}
}