【科目B対策】配列から「最大値の位置(添字)」を求めるアルゴリズム
前回は、配列の中から 最大値そのもの を求めるアルゴリズムを学びました。
科目Bでは、次の段階として非常によく出るのが
最大値が「どこにあるか」
つまり、最大値の位置(添字)を求める処理です。
目次
なぜ「位置」を求める必要があるのか?
実務でも試験でも、次のような場面があります。
- 最大値の要素を 別の要素と入れ替えたい
- 最大値を 削除・更新したい
- ソート(並び替え)の途中で 最大要素を確定させたい
このとき、
値だけ分かっても意味がなく、位置(添字)が必要になります。
配列の準備(例)
A ← [ 7, 3, 9, 4, 6 ]
N ← LENGTH(A)
配列の中身と添字は次の通りです。
- A[1] = 7
- A[2] = 3
- A[3] = 9
- A[4] = 4
- A[5] = 6
基本方針(ここが重要)
考え方は 最大値探索とほぼ同じです。
ただし今回は、
- 最大値そのもの → MAX
- 最大値の位置 → MAX_POS
この 2つをセットで管理します。
科目B風 擬似コード
MAX ← A[1]
MAX_POS ← 1
for i ← 2 to N
if A[i] > MAX then
MAX ← A[i]
MAX_POS ← i
endif
endfor
処理を日本語で説明すると
- 最初の要素 A[1] を最大値とする
- 同時に、その位置として MAX_POS ← 1 を記録
- 2番目以降の要素を順に比較
- より大きい値が見つかったら
- 最大値を更新
- その位置(i)も更新
- ループ終了後、MAX_POS に最大値の添字が入る
実際の動きを追ってみる
| i | A[i] | MAX | MAX_POS |
|---|---|---|---|
| 初期 | 7 | 7 | 1 |
| 2 | 3 | 7 | 1 |
| 3 | 9 | 9 | 3 |
| 4 | 4 | 9 | 3 |
| 5 | 6 | 9 | 3 |
👉 最大値 9 は A[3] にある
初学者がつまずきやすいポイント(重要)
❌ 位置を更新し忘れる
MAX ← A[i]
だけ書いて、
MAX_POS ← i
を書き忘れるケース。
試験では致命傷です。
❌ MAX_POS を 0 で初期化する
MAX_POS ← 0
→ 科目Bの擬似コードでは
添字は 1 から始まる前提です。
❌ i を 1 から回してしまう
for i ← 1 to N
→ 初期値 A[1] と自分自身を比較してしまう
(論理的に破綻はしないが、美しくない)
科目Bでの典型的な出題パターン
このアルゴリズムは、次の形でよく出ます。
- 「処理終了後、MAX_POS の値はいくつか」
- 「A[i] > MAX の条件を ≥ に変えるとどうなるか」
- 「最大値が複数ある場合、どれが選ばれるか」
👉 条件式の意味を読ませる問題が非常に多いです。
次につながる重要ポイント
最大値の位置が分かると、次ができます。
- 最大値と末尾要素の 入れ替え
- 選択ソート(Selection Sort)
- 最大値を確定させるアルゴリズム
つまり、
ここが「ソート系アルゴリズム」の入口
です。
まとめ
- 科目Bでは「値」より「位置」が重要になる
- 最大値と最大値の位置は 必ずセットで管理
- この考え方がソート・探索に直結する
訪問数 3 回, 今日の訪問数 3回



ディスカッション
コメント一覧
まだ、コメントがありません