配列aの先頭3要素は昇順に整列済みである。次の処理で第4要素をその範囲へ挿入すると、終了後のaはどうなるか。配列の要素番号は1から始まる。andは左から評価し、左が偽なら右を評価しないものとする。 整数型の配列: a ← {3, 7, 10, 5, 12} 整数型: key ← a[4] 整数型: j ← 3 while ((j >= 1) and (a[j] > key)) a[j + 1] ← a[j] j ← j - 1 endwhile a[j + 1] ← key
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:ア {3, 5, 7, 10, 12}
この表示だけでは、回答数や正答率は変わりません。
解説
keyには移動前の5を保存します。j=3では10をa[4]へ移し、j=2では7をa[3]へ移します。j=1では3 > 5が偽なので止まります。最後にa[2]へkeyの5を入れ、{3,5,7,10,12}になります。a[5]はこの処理では変更していません。
5より大きい10と7を右へずらし、3の直後へ5を入れた結果です。
10だけでなく7も5より大きいので、7も右へ移動します。
途中では5のあった場所が上書きされますが、最後にkeyから5を戻します。
3は5より小さいので移動しません。5を先頭へ置く処理ではありません。
関連知識
挿入ソートは、整列済み部分へ次の要素を適切な位置に入れていきます。移動対象の値を先にkeyへ保存するので、配列上の元の位置を上書きしても値を失いません。
間違えやすいポイント
while終了時のjは挿入位置そのものではなく、その一つ前です。最後はa[j+1]へ代入します。
覚え方
取り出して保存、大きい値を右へ、空いた所へ挿入。
実務での意味
少量のデータや、ほぼ整列済みのデータを扱う処理を理解する基礎になります。
解説:本サイト編集部によるオリジナル文章