ITパスポート

問67

ITパスポート過去問 令和8年度(2026年)問67

手続sortは,要素数が2以上の整数型の配列を引数numberArrayで受け取り,その要素を昇順に並べ替えた結果を出力する。手続sortの動作確認のために,処理の途中でjの値とworkArrayの全ての要素を出力する。配列numberArrayを{3,5,1,2,4}とし,手続sortをsort(numberArray)として呼び出したとき,jの値が3と出力された直後のworkArrayの全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。

〔プログラム〕

○sort(整数型の配列: numberArray)
    整数型: minIndex,j,k
    整数型の配列: workArray ← numberArray // 配列の複製を作る
    for (jを1から(workArrayの要素数-1)まで1ずつ増やす)
        // j番目から末尾までの要素の中で最も小さい値の要素番号を
        //一つ求める
        minIndex ← j
        for (kを(j + 1)からworkArrayの要素数まで1ずつ増やす)
            if (workArray[k]がworkArray[minIndex]より小さい)
                minIndex ← k
            endif
        endfor
        workArray[j]とworkArray[minIndex]の値を入れ替える

        // 動作確認のために,jの値とworkArrayの全ての要素を出力する
        jの値を出力する
        workArrayの全ての要素を先頭から順にコンマ区切りで出力する
    endfor
    workArrayの全ての要素を先頭から順にコンマ区切りで出力する

選択肢

  • 1, 2, 3, 4, 5
  • 1, 2, 3, 5, 4
  • 4, 5, 3, 2, 1
  • 5, 4, 3, 2, 1

正解と解き方・学習ポイント(AI解説)

正解:
あなたの回答:未回答

この手続sortは選択ソートです。各jで、workArrayのj番目から末尾までの最小値の位置minIndexを探し、workArray[j]とworkArray[minIndex]を入れ替えます。{3,5,1,2,4}は、j=1で{1,5,3,2,4}、j=2で{1,2,3,5,4}になり、j=3では探索範囲{3,5,4}の最小値が3で入替え後も変化しないので、j=3の直後の出力は1,2,3,5,4です。

不正解

最終的に整列が完了した結果です。j=3直後では末尾2要素(5と4)がまだ入れ替わっていないため、この並びにはなりません。

正解

j=1で1を1番目に、j=2で2を2番目に移動した結果、{1,2,3,5,4}になります。j=3では最小値が3で要素番号も3のため配列は変化せず、この並びが出力されます。

不正解

選択ソートでは、先頭側から最小値が確定していきます。j=3直後に先頭が4になることはありません。

不正解

この手続は最小値を前に移動して昇順に並べ替える処理なので、降順の並びにはなりません。

Point

この問題は,擬似コードで示された選択ソートの処理を,変数j,k,minIndexの動きに沿って順に追い,途中の配列workArrayの状態を正しく求められるかを確認することを目的としています。

解くために必要な知識

この問題を解くには、配列の要素番号と、選択ソートの処理手順を理解している必要があります。

用語の整理

用語名 意味
配列 複数の値を、要素番号(添字)で管理するデータ構造です。
要素番号 配列内の位置を表す番号です。この問題では1から始まります。
昇順 値が小さい順に並べることです。
選択ソート 未整列部分(j番目から末尾)から最小値を探し、workArray[j]と入れ替えることを繰り返す整列方法です。

選択ソートの動き(このプログラム)

外側ループ(j)の意味

  • j=1の処理が終わると、1番目の要素が全体で最小の値になります。

  • j=2の処理が終わると、2番目の要素が残りの中で最小の値になります。

  • 以降も同様に、処理が終わった位置jには、その時点で確定した最小値が置かれます。

内側ループ(k)の意味

  • kは(j+1)から末尾まで動きます。

  • workArray[k] < workArray[minIndex]ならminIndexを更新します。

入れ替えの意味

  • 各jについて、workArray[j]とworkArray[minIndex]を入れ替えます。

  • minIndex=jの場合は、同じ要素同士の入れ替えになり、配列は変化しません。

問題の解法手順

問題では、j=3が出力された直後のworkArrayを求めます。外側ループ1回ごとに、j番目にその時点での最小値が確定します。

解く手順

初期状態

workArray = {3, 5, 1, 2, 4}

j=1

  • 探索範囲は1番目から5番目({3, 5, 1, 2, 4})です。

  • 最小値は1(minIndex=3)です。

  • workArray[1]とworkArray[3]を入れ替えます。

  • 結果

    • {1, 5, 3, 2, 4}

j=2

  • 探索範囲は2番目から5番目({5, 3, 2, 4})です。

  • 最小値は2(minIndex=4)です。

  • workArray[2]とworkArray[4]を入れ替えます。

  • 結果

    • {1, 2, 3, 5, 4}

j=3

  • 探索範囲は3番目から5番目({3, 5, 4})です。

  • 最小値は3(minIndex=3)です。

  • workArray[3]とworkArray[3]を入れ替えるため、配列は変化しません。

  • j=3の出力直後の結果

    • 1, 2, 3, 5, 4

選択肢ごとの解説

不正解

最終的に整列が完了した結果です。j=3直後では末尾2要素(5と4)がまだ入れ替わっていないため、この並びにはなりません。

正解

j=1で1を1番目に、j=2で2を2番目に移動した結果、{1,2,3,5,4}になります。j=3では最小値が3で要素番号も3のため配列は変化せず、この並びが出力されます。

不正解

選択ソートでは、先頭側から最小値が確定していきます。j=3直後に先頭が4になることはありません。

不正解

この手続は最小値を前に移動して昇順に並べ替える処理なので、降順の並びにはなりません。

まとめ

この手続sortは選択ソートです。各jで、workArrayのj番目から末尾までの最小値の位置minIndexを探し、workArray[j]とworkArray[minIndex]を入れ替えます。{3,5,1,2,4}は、j=1で{1,5,3,2,4}、j=2で{1,2,3,5,4}になり、j=3では探索範囲{3,5,4}の最小値が3で入替え後も変化しないので、j=3の直後の出力は1,2,3,5,4です。

テクノロジ系 > 基礎理論 > アルゴリズムとプログラミング

順次、単語を追加予定です。もうしばらくお待ちください。