ソフトウェア開発技術者試験 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)に戻る。

ア 2 イ 3 ウ 4 エ 5

解答

ア

解説

 シェルソートは、ある間隔で要素を取り出した部分列を整列し、更に間隔をつめた部分列を取り出して整列する方法です。
 本問では、データ数を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│    └─┴─┴─┴─┴─┴─┴─┴─┴─┘



BohYoh.comトップページへ