配列の要素を先頭から順番に1つずつ調べ、目的の値を探す最もシンプルな探索方法です。
○論理型: linear_search(整数型の配列: array, 整数型: key)
整数型: i
論理型: found ← false
for ( i を 1 から array の要素数 まで 1 ずつ増やす )
if ( array[i] が key と等しい )
found ← true
endif
endfor
return found
○整数型: linear_search_idx(整数型の配列: array, 整数型: key)
整数型: i
for ( i を 1 から array の要素数 まで 1 ずつ増やす )
if ( array[i] が key と等しい )
return i // 見つかった時点で返す(以降は処理しない)
endif
endfor
return -1 // 見つからなかった場合
return に到達した時点で関数はその場で終了します。
「見つかったら即座に返す」ため、残りの要素を無駄に調べません。
見つからなかった場合のみ for ループが最後まで回り、return -1 に到達します。
配列の先頭要素を「暫定の最大値」として持ち、残りの要素と順に比較しながら更新していきます。
○整数型: find_max(整数型の配列: scores)
整数型: i
整数型: max ← scores[1] // 最初の要素で初期化
for ( i を 2 から scores の要素数 まで 1 ずつ増やす )
if ( scores[i] が max より大きい )
max ← scores[i] // より大きければ更新
endif
endfor
return max
i=5 で 53 > 91? → No → 変化なし。最終的に max = 91 が返される。
最大値とほぼ同じ構造で、比較演算子を「より大きい」から「より小さい」に変えるだけです。
○整数型: find_min(整数型の配列: values)
整数型: i
整数型: min ← values[1] // 最初の要素で初期化
for ( i を 2 から values の要素数 まで 1 ずつ増やす )
if ( values[i] が min より小さい )
min ← values[i] // より小さければ更新
endif
endfor
return min
| アルゴリズム | 目的 | 初期化 | 更新条件 | 戻り値 |
|---|---|---|---|---|
| 線形探索(true/false) | 値が存在するか | found ← false | 一致したら true | 論理型 |
| 線形探索(位置) | 値の位置 | なし | 一致したら return i | 整数型(-1は未発見) |
| 最大値探索 | 最も大きい値 | max ← array[1] | array[i] > max のとき | 整数型 |
| 最小値探索 | 最も小さい値 | min ← array[1] | array[i] < min のとき | 整数型 |
次の関数を linear_search({3, 6, 9, 12, 15}, 10) として呼び出したとき、戻り値はどれか。
○論理型: linear_search(整数型の配列: array, 整数型: key)
整数型: i
論理型: found ← false
for ( i を 1 から array の要素数 まで 1 ずつ増やす )
if ( array[i] が key と等しい )
found ← true
endif
endfor
return found
次の関数を find_max({18, 24, 21, 30, 27}) として呼び出したとき、戻り値はどれか。
○整数型: find_max(整数型の配列: scores)
整数型: i
整数型: max ← scores[1]
for ( i を 2 から scores の要素数 まで 1 ずつ増やす )
if ( scores[i] が max より大きい )
max ← scores[i]
endif
endfor
return max
次の関数の最小値探索で、空欄 [ A ] に入るものを選びなさい。
○整数型: find_min(整数型の配列: data)
整数型: i
整数型: min ← [ A ]
for ( i を 2 から data の要素数 まで 1 ずつ増やす )
if ( data[i] が min より小さい )
min ← data[i]
endif
endfor
return min
次の関数は配列から key を探し、最初に見つかった要素番号を返す。見つからなければ -1 を返す。空欄 [ B ] に入るものを選びなさい。
○整数型: linear_search_idx(整数型の配列: a, 整数型: key)
整数型: i
for ( i を 1 から a の要素数 まで 1 ずつ増やす )
if ( a[i] が key と等しい )
[ B ]
endif
endfor
return -1
次のコードを実行すると result の値はいくつになるか。
整数型の配列: nums ← {12, 4, 9, 6, 15}
整数型: i
整数型: min ← nums[1]
for ( i を 2 から nums の要素数 まで 1 ずつ増やす )
if ( nums[i] が min より小さい )
min ← nums[i]
endif
endfor
整数型: result ← min