選択ソート Selection Sort
未整列の範囲を走査して最小値の位置を見つけ、その範囲の先頭と1回だけ交換します。これを左から繰り返すと、左側から順に最小値が確定していきます。
比較回数は常に O(n²) ですが、交換は1パスにつき最大1回(合計 n-1 回)しか起きません。変数 min(最小値の位置)の動きに注目しましょう。
▶📖 記号の読み方(はじめての人はここを確認)
←代入(右の値を左の箱に入れる)。例: 合計 ← 0
=等しいか比べる(代入ではない)
≠等しくない(≠ は != と書いてもOK)
≤ / ≥以下 / 以上(<= / >= でもOK)
×かけ算(* でもOK)
÷わり算。答えの小数は捨てる(例: 7÷2=3)。/ でもOK
%わり算の余り(例: 7%2=1)
要素数(配列)配列の箱の数。2次元では 行数()・列数()
▲i / ▲j配列の下の三角は「いまコードが見ている位置」
algorithm.pseudo擬似言語 / IPA形式
1整数型の配列: data2整数型: i, j, min, tmp3for (i を 1 から 要素数(data) - 1 まで 1 ずつ増やす)4 min ← i5 for (j を i + 1 から 要素数(data) まで 1 ずつ増やす)6 if (data[j] < data[min])7 min ← j8 endif9 endfor10 tmp ← data[i]11 data[i] ← data[min]12 data[min] ← tmp13endfor
▶ 実行を開始します
配列の可視化
箱の番号(添字)は 1 から始まります▶ 整数型の配列: data
実行を開始します
data
5
[1]
3
[2]
8
[3]
6
[4]
2
[5]
7
[6]
4
[7]
1
[8]
← よこにスクロールできます →
まだ見ていないいま見ている数字を書きかえた完了
マスの下の ▲i は「いまコードが見ている位置」・ 棒の高さは数の大きさ
くらべた回数
0
書きかえた回数
0
読んだ回数
0
変数の状態(いまの値)
i=—
位置(カウンタ)
j=—
位置(カウンタ)
min=—
最小値の位置
1 / 112
速度
理解度チェック
解答すると、そのアルゴリズムが実際に動く様子を再生して確認できます。
確認問題 1
選択ソートの交換(要素の入れ替え)回数は、要素数 n に対しておおよそ何回か。
確認問題 2
選択ソートが「安定でない(unstable)」とされる理由はどれか。
▶📊 計算量(速さの目安)— くわしく知りたい人向け
「計算量」は、データが増えたときに手間(時間)がどれくらい増えるかの目安です。n はデータの個数。記号の意味は各カードの下に書いてあります。
最良(いちばん速い場合)
O(n²)
データの数 × 数 で急に増える(遅い)
平均(ふつう)
O(n²)
データの数 × 数 で急に増える(遅い)
最悪(いちばん遅い場合)
O(n²)
データの数 × 数 で急に増える(遅い)
使う追加メモリ(空間)
O(1)
データが増えても一定(最速)
安定性:不安定(安定 = 同じ値どうしの並び順が、並べ替えの前後で変わらないこと)