過去問解きまくり研究所 ホーム

平成25年度 秋期 午前 問9

アルゴリズム

整列に関する問題

未整列の配列 a[i](i=1, 2, …, n)を,流れ図で示すアルゴリズムによって昇順に整列する。n=6 で a[1] 〜 a[6]の値がそれぞれ,21,5,53,71,3,17 の場合,流れ図において,a[j−1]と a[j]の値の入替えは何回行われるか。

〔流れ図〕

        ┌──────────┐
        │   開始   │
        └────┬─────┘
        ╱────┴──────╲
       │   ループ1    │      (注)ループ端の繰返し指定は,
       │ i:1,1,n−1(注)│          変数名:初期値,増分,終値
        ╲────┬──────╱           を示す。
        ╱────┴──────╲
       │   ループ2    │
       │ j:n,−1,i+1(注)│
        ╲────┬──────╱
             │
        ╱────┴──────╲   No
       ⟨  a[j−1]>a[j] ⟩──────┐
        ╲────┬──────╱        │
             │ Yes            │
        ┌────┴─────────┐      │
        │ a[j−1]と a[j]の値 │      │
        │ を入れ替える      │      │
        └────┬─────────┘      │
             ├◀────────────────┘
        ╱────┴──────╲
       │   ループ2    │
        ╲────┬──────╱
        ╱────┴──────╲
       │   ループ1    │
        ╲────┬──────╱
        ┌────┴─────┐
        │   終了   │
        └──────────┘
答えと解説を見る

✓ これが正解ウ8

解説

入替えの回数は、最初の配列にある逆順の対の個数と一致します。

設問は、流れ図で示した整列の手順を六つの値に当てたとき、隣り合う要素の入替えが何回起きるかを問うています。見る軸は二つで、内側のループが添字を下げながら進むことと、入替えが起きるのは隣り合う二つが逆順になっているときだけであることです。内側のループは注記のとおり増分がマイナス 1 なので、後ろから前へ向かって隣どうしを比べ、小さい値を前へ運びます。実際に 21、5、53、71、3、17 の並びで手順を追うと、外側の 1 巡目で 4 回、2 巡目で 3 回、3 巡目で 1 回の入替えが起き、4 巡目以降は条件が成り立たず、合計は 8 回です。最後の並びは 3、5、17、21、53、71 で昇順になっています。別の数え方でも当て直せます。隣り合う要素を一度交換すると、逆順になっている組はちょうど一つだけ減るので、入替えの総数は最初の並びにある逆順の組の個数に等しくなります。21 に対して 3 組、5 に対して 1 組、53 に対して 2 組、71 に対して 2 組で、合計はやはり 8 です。

ほかの選択肢はなぜ違うのか

この問題の用語

出典:平成25年度 秋期 応用情報技術者試験 午前 問9

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)