手続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 の全ての要素 を先頭から順にコンマ区切りで出力する
正答1
解説
正解は1です。
擬似言語のプログラムをたどって、出力される配列の並びを求める問題です。
この処理は、隣り合う要素を比べて大きい方を後ろへ送るバブルソートです。
配列の初期値は{2, 4, 1, 3}で、要素数は4です。
【計算】
n=1のとき、mは1から3まで変化します。
m=1では、2と4を比べて入れ替えず、{2, 4, 1, 3}のままです。
m=2では、4が1より大きいので入れ替え、{2, 1, 4, 3}になります。
m=3では、4が3より大きいので入れ替え、{2, 1, 3, 4}になります。
n=2のとき、mは1から2まで変化します。
m=1では、2が1より大きいので入れ替え、{1, 2, 3, 4}になります。
m=2では、2と3を比べて入れ替えず、{1, 2, 3, 4}のままです。
n=3のとき、mは1だけです。
m=1では、1と2を比べて入れ替えず、{1, 2, 3, 4}のままです。
最終的に、1, 2, 3, 4が出力されます。
【選択肢別解説】
1:○ 小さい順に並べ替えた結果である1, 2, 3, 4が出力されます。
2:× 1, 3, 2, 4は並べ替えの途中にも現れない並びです。
3:× 3, 1, 4, 2は並べ替えの結果ではありません。
4:× 4, 3, 2, 1は大きい順の並びです。
条件が「前の要素が大きければ入れ替える」なので、結果は小さい順になります。
【ポイント】
バブルソートでは、内側のループを1周するたびに最大の値が末尾に確定します。
そのため、外側のループが進むごとに比較する範囲が1つずつ短くなります。