問題
問60 手続 printArray は,配列 integerArray の要素を並べ替えて出力する。手続 printArray を呼び出したときの出力はどれか。ここで,配列の要素番号は1から始まる。 【プログラム】 OPrintArray() 整数型: 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,2,3,4
- イ1,3,2,4
- ウ3,1,4,2
- エ4,3,2,1
解説
正解:ア
概要
この問題は、配列の並べ替えアルゴリズムの理解を問う問題です。特に、与えられた擬似コードがバブルソートの手順であることを理解し、出力結果を正しく予測できるかを確認しています。
正解の理由
手続 printArray の二重ループは、隣接する要素を比較して大きい方を後ろに入れ替える処理を繰り返しています。これは典型的なバブルソートの動作であり、配列 {2, 4, 1, 3} を昇順に並べ替えるため、最終的な出力は {1, 2, 3, 4} となります。
各選択肢の解説
ア(×): もし {2, 4, 1, 3} のまま出力されると考えるのは誤りで、内側ループで隣接要素の入れ替えが行われるため、元の順序のままではありません。
イ(×): {1, 3, 2, 4} と出力されると考えるのは誤りで、バブルソートは各ループで最大値を末尾に移動させるため、途中結果ではなく最終的に完全な昇順になります。
ウ(〇): {1, 2, 3, 4} と出力されるのが正解です。擬似コードはバブルソートを実装しており、配列の全要素を昇順に並べ替えます。
エ(×): {4, 3, 2, 1} と出力されるのは誤りで、条件文では大きい方を後ろに入れ替える昇順ソートであり、降順にはなりません。
ポイント
バブルソートは隣接要素の比較と入れ替えを繰り返して配列を昇順に並べ替えるアルゴリズムであることを押さえておくと、出力結果をすぐに予測できます。