問題
次の関数search(arr, target)について、線形探索を行う。arr=[10,20,30,40,50], target=30のとき、戻り値はいくつか。 ○ 整数型: search(整数型の配列: arr, 整数型: target) 整数型: i for (i を 0 から arr の要素数−1 まで 1 ずつ増やす) if (arr[i] = target) return i endif endfor return -1
選択肢
- 1ア -1
- 2イ 2
- 3ウ 3
- 4エ 30
正解
2. イ 2
詳しい解説を見る解説を閉じる
解説
正解はイ。線形探索は配列の先頭から順に目的の値と比較していくアルゴリズムである。トレースすると、i=0:arr[0]=10≠30。i=1:arr[1]=20≠30。i=2:arr[2]=30=30で一致し、その時点でreturn iにより添字2を返して関数は終了する。アの−1は配列内に目的の値が存在しなかった場合の戻り値、ウの3は「3番目の要素」という日常的な数え方と添字が0始まりであることを混同した場合、エの30は添字ではなく要素の値そのものを返すと誤読した場合の誤りである。科目Bでは「戻り値は添字か値か」「添字は0始まりか1始まりか」が定番の引っかけであり、線形探索の計算量がO(n)、ソート済み配列に使える二分探索がO(log n)という対比も頻出ポイントである。
一問一答
科目A 180問+科目B 60問