ITパスポート試験 令和8年度 公開問題 問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 の全ての要素 を先頭から順にコンマ区切りで出力する
選択肢を押すと答え合わせができます。
正解と解説を見る
【正解】イ
この手続は、未整列部分から最小値を探して先頭と入れ替える選択ソートです。初期状態は3,5,1,2,4です。j=1では、1番目から5番目の中で最小値1を探し、1番目の3と3番目の1を入れ替えるので、1,5,3,2,4になります。j=2では、2番目から5番目の中で最小値2を探し、2番目の5と4番目の2を入れ替えるので、1,2,3,5,4になります。j=3では、3番目から5番目の3,5,4の中で最小値は3です。minIndexは3のままなので、3番目同士を入れ替えても配列は変わりません。したがって、jの値が3と出力された直後のworkArrayは1,2,3,5,4です。
アの1,2,3,4,5は誤りです。これは最後まで昇順に整列された後の結果です。j=3の時点では、4番目と5番目の5,4はまだ並べ替えられていません。
ウの4,5,3,2,1は誤りです。これはこの処理の途中状態にはなりません。
エの5,4,3,2,1は誤りです。これは降順の並びであり、この手続は昇順に並べ替えます。
【ポイント】 選択ソートは「未整列部分の最小値を探して先頭に置く」処理です。 出力のタイミングは、入替え後である点に注意します。 途中経過の問題では、jごとに配列全体を書き出して追跡しましょう。
【参考】擬似言語の記述形式(ITパスポート試験用)
アルゴリズムを表現するための擬似的なプログラム言語(擬似言語)を使用した問題では、各問題文中に注記がない限り、次の記述形式が適用されているものとする。
〔記述形式〕 ・○手続名又は関数名 手続又は関数を宣言する。 ・型名: 変数名 変数を宣言する。 ・/* 注釈 */ 、 // 注釈 注釈を記述する。 ・変数名 ← 式 変数に式の値を代入する。 ・手続名又は関数名(引数, …) 手続又は関数を呼び出し、引数を受け渡す。
・if (条件式1) 処理1 elseif (条件式2) 処理2 elseif (条件式n) 処理n else 処理n + 1 endif 選択処理を示す。条件式を上から評価し、最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず、対応する処理も実行しない。どの条件式も真にならないときは、処理n + 1を実行する。各処理は、0以上の文の集まりである。elseifと処理の組みは、複数記述することがあり、省略することもある。elseと処理n + 1の組みは一つだけ記述し、省略することもある。
・while (条件式) 処理 endwhile 前判定繰返し処理を示す。条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。
・do 処理 while (条件式) 後判定繰返し処理を示す。処理を実行し、条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。
・for (制御記述) 処理 endfor 繰返し処理を示す。制御記述の内容に基づいて、処理を繰返し実行する。処理は、0以上の文の集まりである。
〔演算子と優先順位〕(上ほど優先度が高い) ・式:() ・単項演算子:not + - ・二項演算子(乗除):mod × ÷ ・二項演算子(加減):+ - ・二項演算子(関係):≠ ≦ ≧ < = > ・二項演算子(論理積):and ・二項演算子(論理和):or 注記 演算子 mod は、剰余算を表す。
〔論理型の定数〕 true, false
〔配列〕 一次元配列において"{"は配列の内容の始まりを、"}"は配列の内容の終わりを表し、配列の要素は、"["と"]"の間にアクセス対象要素の要素番号を指定することでアクセスする。 例 要素番号が1から始まる配列exampleArrayの要素が{11, 12, 13, 14, 15}のとき、要素番号4の要素の値(14)はexampleArray[4]でアクセスできる。 二次元配列において、内側の"{"と"}"に囲まれた部分は、1行分の内容を表し、要素番号は、行番号、列番号の順に","で区切って指定する。 例 要素番号が1から始まる二次元配列exampleArrayの要素が{{11, 12, 13, 14, 15}, {21, 22, 23, 24, 25}}のとき、2行目5列目の要素の値(25)は、exampleArray[2, 5]でアクセスできる。
出典:令和8年度 ITパスポート試験 公開問題 問67
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。
この回の100問を、アプリで通しで解く
- 本番と同じ問題数・制限時間で通し演習(模試モード)
- 間違えた問題は自動で「復習すべき問題」に回る
- 解説で分からない点はAIに質問できる