ソフトウェア開発技術者試験 |
2004年度 = 平成16年度 |
午前 |
問11 |
次の手順はシェルソートによる整列を示している。データ列“7, 2, 8, 3, 1, 9, 4, 5, 6”を手順(1)~(4)に従って整列するとき、手順(3)を何回繰り返して完了するか。ここで、[ ]は小数点以下を切り捨てる。
〔手順〕
(1) [データ数÷3]→H とする。
(2) データ列を互いにH 要素分だけ離れた要素の集まりからなる部分列とし、それぞれの部分列を挿入法を用いて整列する。
(3) [H ÷ 3]→H とする。
(4) H が0であればデータ列の整列は完了し、0でなければ(2)に戻る。
ア
シェルソートは、ある間隔で要素を取り出した部分列を整列し、更に間隔をつめた部分列を取り出して整列する方法です。
本問では、データ数を3で割っていきますので、
[9÷3]→3 3ソート(3要素離れたものをソート)
[3÷3]→1 1ソート(1要素離れたもの=全体をソート)
と、2回のソートで全体のソートが完了します。
■1回目■
H = [9÷3] = 3 → 3ソートを実行
┌─────┬─────┐
┌─────┬─────┐
┌─────┬─────┐
┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
│7│2│8│3│1│9│4│5│6│
└─┴─┴─┴─┴─┴─┴─┴─┴─┘
↓ 赤・青・緑をそれぞれソート
┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
│3│1│6│4│2│8│7│5│9│
└─┴─┴─┴─┴─┴─┴─┴─┴─┘
■2回目■
H = [3÷3] = 3 → 1ソートを実行
┌─┬─┬─┬─┬─┬─┬─┬─┐
┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
│3│1│6│4│2│8│7│5│9│
└─┴─┴─┴─┴─┴─┴─┴─┴─┘
↓ 赤をソート
┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
│1│2│3│4│5│6│7│8│9│
└─┴─┴─┴─┴─┴─┴─┴─┴─┘