選択ソート
N個のデータが,配列 a[0]〜 a[N-1]に格納されているとする.
選択ソート:
- a[0]〜a[N-1]の内,最小のものをa[0]と交換する
- a[1]〜a[N-1]の内,最小のものをa[1]と交換する
- a[2]〜a[N-1]の内,最小のものをa[2]と交換する
- ...
- a[N-2]〜a[N-1]の内,最小のものをa[N-2]と交換する
for(k=0; k<N-2; k++) {
a[k]〜a[N-1]の内,最小のものを探し,a[k]と交換する
}
a[k]〜a[N-1]の内,最小のものを探す
:
- 取り敢えず,a[k]を最小値と仮定する
- a[k+1]と比較し,小さければ最小値を置き換える
- a[k+2]と比較し,小さければ最小値を置き換える
- a[k+3]と比較し,小さければ最小値を置き換える
- ...
- a[N-1]と比較し,小さければ最小値を置き換える
詳細化:
t ← k;
for(m=k+1; m<N; m++) {
if(a[m] < a[t]) t ← m;
}
- 上の操作で(a[k], ... a[N-1]) の内,
最小値は a[t] であることが判明したので,これを a[k] と交換する