基本情報技術者試験 (FE) 科目 B — 練習問題 第 15 問 / 全 20 問 · 本番相当
整列の交換回数
関連レッスン: 繰り返し (for) — 「〜から〜まで〜ずつ増やす」の読み方
次のプログラムを実行したとき、出力される内容はどれか。
整数型の配列: 数値 ← {3, 1, 4, 2}
整数型: 一時 ← 0
整数型: 交換 ← 0
for (i を 1 から 3 まで 1 ずつ増やす)
for (j を i + 1 から 4 まで 1 ずつ増やす)
if (数値[i] > 数値[j])
一時 ← 数値[i]
数値[i] ← 数値[j]
数値[j] ← 一時
交換 ← 交換 + 1
endif
endfor
endfor
print(交換)解説
正解: イ 3
配列の変化と一緒に数えます。i = 1: j = 2 で 3 > 1 なので交換し {1, 3, 4, 2} (1 回目)、j = 3 は 1 > 4 が偽、j = 4 は 1 > 2 が偽。i = 2: j = 3 は 3 > 4 が偽、j = 4 で 3 > 2 なので交換し {1, 2, 4, 3} (2 回目)。i = 3: j = 4 で 4 > 3 なので交換し {1, 2, 3, 4} (3 回目)。合計 3 回です。
比較の回数は 3 + 2 + 1 = 6 回ですが、交換が起きるのはそのうち条件が真になった 3 回だけです。「比較回数」と「交換回数」を取り違えて 6 と答えるのが典型的な誤りです。
交換のたびに 数値[i] が更新される点にも注意してください。i を固定したまま最小値を探して最後に 1 回だけ交換する選択ソートとは違い、このコードは条件を満たすたびに交換するため交換回数が多くなります。
比較は 6 回だが、交換が起きるのは条件が真になった回だけ。
演習量を増やしたい方へ(おすすめ書籍)
擬似言語の記法の読み方から、トレースして答えを出すまでを一冊で通せる科目B特化本。手を動かして追う練習量を確保したいときの定番。
科目Bの出題パターンを網羅的に演習できる対策書。構文を理解した後、解法の型を身につける段階で効く。
科目Bの出題範囲を絞り込んだ薄型の対策書。頻出アルゴリズムと情報セキュリティを短期間で一周したいときに。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)