令和4年度 秋期 応用情報技術者試験 午前 問6

未整列の配列 A[i]A[i] (i=1,2,…,ni=1, 2, \dots, n) を,次の流れ図によって整列する。ここで用いられる整列アルゴリズムはどれか。

ソートアルゴリズムのフローチャート
図の説明テキスト

ソートアルゴリズムのフローチャート。以下の処理が記載されている。

  • 開始
  • ループ1 (変数 i : 1, 1, n-1) (注)
  • ループ2 (変数 j : n, -1, i+1) (注)
  • 条件分岐: A[j] : A[j-1] を比較
    • 「<」の場合:
      • w ← A[j]
      • A[j] ← A[j-1]
      • A[j-1] ← w
    • 「≧」の場合: 何も処理せずにループの終端へ進む
  • ループ2 終端
  • ループ1 終端
  • 終了
    右側に注記があり、「(注) ループ端の繰返し指定は, 変数名 : 初期値, 増分, 終値 を示す。」と記載されている。
解答・解説

正解: エ. バブルソート

バブルソートとは

隣り合う要素同士を比較し、順序が逆であれば入れ替える操作を繰り返すことで、配列全体を整列させるアルゴリズムです。

正解の根拠

流れ図に示された処理を確認します。

外側のループ1では、変数 ii を 11 から n−1n-1 まで増分 11 で繰り返します。
内側のループ2では、変数 jj を配列の最後尾である nn から i+1i+1 まで増分 −1-1 で減らしながら繰り返します。
ループ2の内部の条件分岐では、隣り合う要素 A[j]A[j] と A[j−1]A[j-1] を比較しています。そして、A[j]<A[j−1]A[j] < A[j-1] の場合、変数 ww を使って A[j]A[j] と A[j−1]A[j-1] の値を入れ替えます。

このように、配列の後方から先頭に向かって隣り合う要素を比較・交換し、最も小さな要素を先頭側に確定させていく手順は、バブルソートのアルゴリズムです。したがって、正解はエとなります。

各選択肢の解説

  • ア: クイックソートは、基準値を選び、それより小さい要素と大きい要素のグループに分割する操作を繰り返すアルゴリズムであり、隣り合う要素の交換を後方から順に繰り返す図の処理とは異なります。
  • イ: 選択ソートは、未整列の部分から最小値を探し出し、それを未整列部分の先頭要素と交換することを繰り返すアルゴリズムであり、隣り合う要素の交換を繰り返す図の処理とは異なります。
  • ウ: 挿入ソートは、未整列の部分から要素を1つ取り出し、整列済みの部分の適切な位置に挿入することを繰り返すアルゴリズムであり、図の処理とは異なります。
  • エ: 正解です。隣り合う要素の比較と交換を繰り返すアルゴリズムはバブルソートです。

Spineチーム