本文へスキップ

令和5年度 ITパスポート試験 問60

この問題の解説と、これまでの解答の記録です。

問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 の全ての要素 を先頭から順にコンマ区切りで出力する

出典 令和5年度 ITパスポート試験 問60
解説

問 60バブルソートは隣接要素を比較・交換して整列するアルゴリズム

  • ア

    正解 このプログラムは隣り合う 2 要素を比較し,左が右より大きければ入れ替える「バブルソート(昇順)」です。初期配列は {2, 4, 1, 3}。外側 n を 1〜3,内側 m を 1〜(4−n)で回します。n=1 の走査(m=1〜3)で {2,4,1,3}→{2,1,4,3}→{2,1,3,4},n=2 の走査(m=1〜2)で {2,1,3,4}→{1,2,3,4},n=3 の走査(m=1)では入れ替え無しで {1,2,3,4} のまま。よって出力は「1,2,3,4」となり,正解はアです。

  • 不正解イ

    「1,3,2,4」は 2 と 3 の順序が逆で,昇順に整列していません。各走査を最後まで実行すると 2 は 3 より前に来るため,この並びにはなりません。

  • 不正解ウ

    「3,1,4,2」は整列されておらず,初期配列を途中までしか処理していない(または比較条件を取り違えた)誤りです。プログラムは全走査を行い完全に昇順へ整列します。

  • 不正解エ

    「4,3,2,1」は降順です。本プログラムの条件は「左 > 右なら入れ替える」で大きい値を後ろへ送る昇順ソートのため,降順にはなりません。

ここがポイント
  • バブルソートは隣接要素を比較・交換して整列するアルゴリズム。条件「integerArray[m] > integerArray[m+1] なら入れ替え」は大きい値を末尾へ運ぶ昇順整列を意味する。
  • 擬似言語の二重ループは配列の値を 1 つずつ追跡(トレース)して確実に求める。内側ループ上限が(要素数 − n)で,確定した末尾要素を比較から除外する点が要点。
用語

解答の記録