ITパスポート試験 / 令和5年度 ITパスポート試験 公開問題 / 問60
certification-simodake-work

令和5年度 ITパスポート試験 公開問題 問60 解説 バブルソートのアルゴリズム

設問図

手続 printArray は,配列 integerArray の要素を並べ替えて出力する。手続 printArray を呼び出したときの出力はどれか。ここで,配列の要素番号は1から始ま る。 〔プログラム〕 ○printArray() 整数型: n, m 整数型の配列: integerArray ← {2, 4, 1, 3} for (n を 1 から (integerArray の要素数 - 1) まで 1 ずつ増やす) for (m を 1 から (integerArray の要素数 - n) まで 1 ずつ増やす) if (integerArray[m] > integerArray[m + 1]) integerArray[m] と integerArray[m + 1] の値を入れ替える endif endfor endfor integerArray の全ての要素 を先頭から順にコンマ区切りで出力する

  1. ア 1, 2, 3, 4 ✓ 正答
  2. イ 1, 3, 2, 4
  3. ウ 3, 1, 4, 2
  4. エ 4, 3, 2, 1

解説

この問題は、プログラムのコードを1行ずつ追わなくても、アルゴリズムの種類を特定するだけで正解できます。プログラム内の処理(隣り合う値を比較し、左側が大きければ入れ替える)は、代表的な整列アルゴリズムである「バブルソート」そのものです。バブルソートは、データを昇順(小さい順)に並び替える処理を行うため、初期値 {2, 4, 1, 3} を昇順に並べた {1, 2, 3, 4} が出力結果となります。

整列(ソート)アルゴリズムの基本 コンピュータでデータを扱う際、特定の順序に並び替えることは非常に重要です。バブルソートは、泡(バブル)が浮かび上がるように、隣り合う要素を比較・交換しながら端から順に確定させていく手法です。

このプログラムの動作を少しだけ追ってみると、より確信が持てます。

  1. 最初のループ(n=1)では、隣り合う要素を比較し、最も大きな値が配列の最後(4番目)に移動します。
  2. 次のループ以降、確定した箇所を除いて同様の比較を繰り返すことで、最終的に全体が小さい順に並びます。 コード上の integerArray[m] > integerArray[m + 1] という条件式が、左側(m番目)の方が大きければ入れ替えるという動きをしているため、結果として数値が小さいものほど前に来ることになります。

試験で役立つポイント ITパスポート試験では、今回のようなアルゴリズムの問題が出題されます。全てのステップをトレースすると時間がかかり、ケアレスミスも起きやすいため、以下の点に着目しましょう。 ・条件分岐(if文)が「より大きい」かどうかを確認する ・データの入れ替え処理が行われているか確認する ・上記二つがセットであれば、昇順(小さい順)に並べ替える処理だと判断する

他にも、選択ソートやクイックソートといった別のアルゴリズムも問われることがありますが、まずは「このプログラムは結局何をしたいのか?」という目的(目的:整列)を読み取る練習をしましょう。そうすれば、複雑なコードを読み込む必要がなくなり、回答時間を大幅に短縮できます。

  • 基本情報技術者試験のアルゴリズム問題対策(ITパスポートでも役立つ考え方)
  • わかりやすいアルゴリズム解説(整列アルゴリズムの基本)

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう