問題
次の擬似言語プログラムを実行したとき、配列dataの内容はどれか。 整数型の配列: data ← {5, 3, 8, 1, 4} /* 選択ソート 1パス目 */ 整数型: minIdx ← 1 整数型: j ← 2 while (j ≦ 5) if (data[j] < data[minIdx]) minIdx ← j endif j ← j + 1 endwhile 整数型: temp ← data[1] data[1] ← data[minIdx] data[minIdx] ← temp
選択肢
- 1ア {1, 3, 8, 5, 4}
- 2イ {3, 5, 8, 1, 4}
- 3ウ {1, 3, 5, 4, 8}
- 4エ {5, 3, 8, 1, 4}
正解
1. ア {1, 3, 8, 5, 4}
詳しい解説を見る解説を閉じる
解説
選択ソートの1パス目は、配列全体から最小値の位置を探し、最後に先頭要素と交換する。前半のループでminIdxの変化を追うと、data[2]=3<data[1]=5でminIdx=2、data[4]=1<data[2]=3でminIdx=4となり、data[3]=8とdata[5]=4では更新されない。最小値はdata[4]=1である。後半の交換処理でdata[1]=5とdata[4]=1を入れ替え、結果は{1, 3, 8, 5, 4}となるため、アが正解である。イの{3, 5, 8, 1, 4}は隣接要素を交換するバブルソートの動きと混同した値、ウはソートが複数パス進んだ状態、エは交換が行われなかった場合である。頻出ポイント:選択ソートは「走査中は位置の記録だけ行い、交換はパスの最後に1回」という点がバブルソートとの違いとして頻出である。
一問一答
科目A 180問+科目B 60問