基本情報技術者試験 (FE) 科目 B — 練習問題 第 12 問 / 全 20 問 · 本番相当
挿入ソートの空欄
関連レッスン: 配列 — 添字が 1 から始まる仕様と操作
次のプログラムは配列 数値 を昇順に整列する。空欄 a に入れる正しい答えはどれか。
整数型の配列: 数値 ← {4, 2, 7, 1}
整数型: 一時 ← 0
整数型: j ← 0
for (i を 2 から 4 まで 1 ずつ増やす)
一時 ← 数値[i]
j ← i - 1
while (j ≧ 1 and 数値[j] > 一時)
数値[j + 1] ← 数値[j]
[ a ]
endwhile
数値[j + 1] ← 一時
endfor
print(数値)解説
正解: ア j ← j - 1
内側の while は「一時 より大きい要素を 1 つ後ろへずらす」処理です。ずらしたら比較対象を 1 つ手前に移す必要があるので、j ← j - 1 が入ります。これがないと j が動かず、同じ要素を延々とコピーし続ける無限ループになります。
整列の流れは次のとおりです。i = 2 で 一時 = 2、4 > 2 なので 4 を後ろへずらし {4, 4, 7, 1} → j = 0 でループを抜け 数値[1] ← 2 として {2, 4, 7, 1}。i = 3 は 7 > 何もないのでそのまま。i = 4 で 一時 = 1、7・4・2 を順にずらして先頭に 1 を挿入し {1, 2, 4, 7} になります。
while の条件が j ≧ 1 and 数値[j] > 一時 の順である点も重要です。j が 0 になったときに 数値[0] を読まずに済むのは、and が短絡評価されるからです (逆順に書くと範囲外アクセスで落ちます)。
ずらした後に比較対象を手前へ動かす。j を減らさないと無限ループになる。
演習量を増やしたい方へ(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)