スライド 1

アルゴリズムとデータ構造
補足資料7-3
「単純選択ソートselsort.c」
横浜国立大学
理工学部
数物・電子情報系学科
富井尚志
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
65 90 85 70 86 92 63 85
未整列
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
65 90 85 70 86 92 63 85
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
90 85 70 86 92
65
63
85
未整列
入れ替え
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 90 85 70 86 92 65 85
整列済み
未整列
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 90 85 70 86 92 65 85
整列済み
未整列
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 90 85 70 86 92 65 85
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 90 85 70 86 92 65 85
整列済み
未整列
入れ替え
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 85 70 86 92 90 85
整列済み
未整列
入れ替え
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 85 70 86 92 90 85
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 85 70 86 92 90 85
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 86 92 90 85
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 86 92 90 85
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 86 92 90 85
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 86 92 90 85
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 92 90 86
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 92 90 86
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 92 90 86
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 86 90 92
整列済み
未整列
未整列エリアの最小
入れ替え
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 86 90 92
整列済み
未整列
未整列エリアの最小
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
8件のデータ
63 65 70 85 85 86 90 92
整列済み
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの最小(最大)要素1個を探す
→ あったら、候補と入れ替える
n件のデータ
整列済
整列済
未整列
未整列
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの要素1個を、整列済みのエリアのどこに「挿入」すればよいか探す
n件のデータ
整列済
未整列
整列済
未整列
i番目の要素
i番目の要素を整列済みにするためのコスト
入れ替え対象の場所を決めるのに:1~n-i回の比較
入れ替え対象の値を保持するのに:1~1+1/2+1/3+…+1/n回のデータ移動
繰り返し回数: n-1回
整列済みのエリアと未整列のエリアに分けて考える。
解の方針:未整列のエリアの要素1個を、整列済みのエリアのどこに「挿入」すればよいか探す
O(n2)の比較
データ移動回数については、参考書(N.ヴィルト著「アルゴリズムとデータ構造」)参照
n件のデータ
整
列
済
未整列
未整列
整列済
…
整列済
n-1回の繰返し
未整列
…
それぞれ、およそ(n-i)/2回程度の比較
整列済
未整列
…
整列済
未整列
…
整列済
整列済
未整列
未
整
列