応用情報技術者試験 令和5年秋期 問6
あるデータ列を整列したら状態0から順に状態1,2,・・・,Nへと推移した。整列に使ったアルゴリズムはどれか。
状態0 3,5,9,6,1,2
状態1 3,5,6,1,2,9
状態2 3,5,1,2,6,9
・
・
状態N 1,2,3,5,6,9ア:クイックソート イ:挿入ソート
出典 IPA公開[過去問題]:https://www.ipa.go.jp/shiken/mondai-kaiotu/ps6vr70000010d6y-att/2023r05a_ap_am_qs.pdf
ウ:バブルソート エ:ヒープソート
クイックソートとは
データ列の中で基準値(多くは中間値)を決めて、それよりも「小さいグループ」と「大きいグループ」を作って分割します。それぞれのグループの中に複数の値があれば、同じようにグループの中で基準値を決めてそれよりも「小さいグループ」と「大きいグループ」に再度分割します。これをグループのデータ列数が1になるまで続けることで並び替えを行います。
挿入ソートとは
データ列を「整列済」と「未整列」に分割して、「未整列」エリアの先頭データを取り出して、「整列済」エリアの適切な場所に挿入していくことで「整列済」エリアを徐々に拡大させていく方法です。
この方法で整列した場合、データ列の最後まで1週した段階で正しい並び[1,2,3,5,6,9]になるかと思います。
バブルソートとは
データ列の隣り合うデータ同士を比較して入れ替えて整列する方法です。先頭から始めて最後まで比較すると2週目は先頭から2番目の位置から始めて最後まで比較して整列していきます。3週目は先頭から3番目の位置から同様に比較して整列していくのをデータ列の最後の1つ手前位置まで繰り返します。
この方法で整列した場合、複数周回整列を行うことになるので1週目が終わったであろう状態1では「3,5,6,1,2,9」になります。
ヒープソートとは
未整列のデータ列を木構造で整列(親値≦子値もしくは親値≧子値)して根の値を順番に取り出すことで整列する方法です。
状態0と状態1を見ると「3,5」はそのままですが、「9,6,1,2」の順番が「6,1,2,9」になっています。バブルソートを実行すると次のようにデータ列の中身が整列されていきます。
※黄色で塗りつぶした部分が入替対象になる箇所です。
正解は「ウ:バブルソート」となります。