void sort() { // 選択ソート(昇順)
int minpos; // 最小値の場所を示す変数
for (int i = 0; i < length - 1; i++) {
minpos = i; // 最小値の場所を i に設定
for (int j = i + 1; j < length; j++) {
if (a[minpos] > a[j]) { // 要素の比較
minpos = j; // 最小値の場所の変更
}
}
swap(i, minpos); // 最小値要素の交換
}
}
void swap(int i, int j) { // 要素の交換
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
// SelectionSortMain.java
class SelectionSortMain {
static int a []; // ソートする対象を置く配列
static int length = 10; // 配列の長さ (初期値)
static SelectionSort sSort; // ソートオブジェクト変数
public static void main (String args[]) { // ここから実行が始まる
if (args.length != 0) { // コマンドの引数を配列の長さに設定
length = new Integer(args[0]).intValue();
}
a = new int[length]; // 配列を作成
sSort = new SelectionSort(); // 選択ソートオブジェクトの生成
initialize(); // 配列の初期値設定
print("befor"); // ソートする対象の表示
sSort.sort(); // ソートの実行
print("after"); // ソート結果の表示
}
static void initialize() { // 配列の初期値設定メソッド
for (int i = 0; i < length; i++) { // 乱数を使って配列の値設定を行う
a[i] = (int) (length * 100 * Math.random());
}
sSort.set(a); // ソートオブジェクトに配列値を設定
}
static void print(String string) { // 配列要素値の表示メソッド
a = sSort.get(); // ソートオブジェクトから配列値を獲得
System.out.println(string + ": "); // 値の表示
for (int i = 0; i < length; i++) {
System.out.print("" + a[i] + " ");
}
System.out.println();
}
}
/* 選択ソート */
class SelectionSort {
int a []; // ソートする要素を置く配列
int minpos; // 最小値の場所を示す変数
void sort() { // 単純ソート(昇順)
for (int i = 0; i < a.length - 1; i++) {
minpos = i; // 最小値の場所を i に設定
for (int j = i + 1; j < a.length; j++) {
if (a[minpos] > a[j]) { // 要素の比較
minpos = j; // 最小値の場所の変更
}
}
swap(i, minpos); // 最小値要素の交換
}
}
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);
}
}
(n−1)+(n−2)+…+1 = n (n−1) / 2