その他の要素を比較してソートしていくのが基本選択法です。
選択ソートとも言われます。
最初は、配列のインデックス0を仮の最小値としてソート開始します。
下記は、最小値を探索して要素をソートするアルゴリズムです。
public class Demo {
public static void main(String[] args) {
int[] num = { 50, 30, 10, 20, 5, 90, 15, 2, 9 };
sort(num);
for(int s : num) {
System.out.print(s + " ");
}
}
public static void sort(int[] data) {
for(int i = 0; i < data.length - 1; i++) { //最小値との入替え
int min = i; //仮の最小値
for(int j = i + 1; j < data.length; j++) { //最小値の探索
if(data[j] < data[min]) {
min = j;
}
}
int tmp = data[i];
data[i] = data[min];
data[min] = tmp;
}
}
}
========== 実行結果 ==========
2 5 9 10 15 20 30 50 90
==============================
内側のforで探索して見つけた最小値と仮の最小値の交換を
外側のforで行っています。
バブルソートのように1ループで複数交換を繰り返すのではなくて
選択ソートは、1ループで1回交換になります。
仮の最小値とそれ以外の要素を比較して1回交換。
次もまた仮の最小値とそれ以外の要素を比較して1回交換。
またまた次も仮の最小値とそれ以外の要素を比較して1回交換。
と、こんな感じの処理が繰り返されてソートされます。
条件を満たしていない時には交換されません。
外側のforが「data.length - 1」になっているのは
選択ソートが、データN個に対して
「N(N - 1)/2」回の比較と「N - 1」回の交換を行うから。
† 地球の末路!? †
【このカテゴリーの最新記事】
- no image
- no image