図のフローチャートで表されるアルゴリズムについて、次の(a)及び(b)の問に答えよ。変数は全て整数型とする。
このアルゴリズム実行時の読込み処理において, n=5とし、a[1]=2, a[2]=3, a[3]=8, a[4]=6, a[5]=5とする。
フローチャート中のXで示される部分の処理は何回行われるか、正しいものを次の(1)~(5)のうちから一つ選べ。
(注:フローチャートは配列要素を昇順に並べ替えるバブルソートのようなアルゴリズムを示している。
ループ構造:
外側ループ i = 1 to n-1
内側ループ j = i+1 to n
比較:a[i] > a[j] ならば 交換(X部分)
)
図はタップで拡大できます。
回答を選ぶ
選択肢を押すと、すぐに結果が表示されます。
要点
正解は(1)。処理X(交換処理 `swap`)が行われる回数をトレースする。条件 `a[i] > a[j]` が成立したときに交換が発生する。
詳細解説
正解は(1)です。
処理X(交換処理 `swap`)が行われる回数をトレースする。
条件 `a[i] > a[j]` が成立したときに交換が発生する。
・i = 1 (`a[1]=2`):
・j=2 (3), j=3 (8), j=4 (6), j=5 (5) と比較。2より小さいものはないため交換なし。
・i = 2 (`a[2]=3`):
・j=3 (8), j=4 (6), j=5 (5) と比較。3より小さいものはないため交換なし。
・i = 3 (`a[3]=8`):
・j=4 (`a[4]=6`): `8 > 6` 成立。交換 \(\rightarrow\) `a`は `[2, 3, 6, 8, 5]` (1回目)
・j=5 (`a[5]=5`): 現在の`a[3]`(6) と比較。`6 > 5` 成立。交換 \(\rightarrow\) `a`は `[2, 3, 5, 8, 6]` (2回目)
・ここで `a[3]` は 5 で確定。
・i = 4 (`a[4]=8`):
・j=5 (`a[5]=6`): `8 > 6` 成立。交換 \(\rightarrow\) `a`は `[2, 3, 5, 6, 8]` (3回目)
合計交換回数は 3回 である。
以上より、選択肢(1)が正解です。