01
表記とPythonで読む
小さい順に並んだ8つの数から、68がどこにあるかを探します。真ん中の値と比べ、探す値のほうが大きければ右半分、小さければ左半分だけを残します。
共通テスト用プログラム表記
Data = [12, 25, 31, 47, 56, 68, 73, 89]sagasu = 68hidari = 0 , migi = 要素数(Data) - 1basho = -1hidari <= migi and basho == -1 の間繰り返す:|aida = (hidari + migi) ÷ 2|もし Data[aida] == sagasu ならば:||basho = aida|そうでなくもし Data[aida] < sagasu ならば:||hidari = aida + 1|そうでなければ:⎿⎿migi = aida - 1もし basho == -1 ならば:|表示する(sagasu, "は見つかりませんでした")そうでなければ:⎿表示する(sagasu, "は", basho, "番目にありました")
Python書き換えて実行できます
▶ 実行 を押すと、ここに結果が出ます
共通テストの表記どおりなら「68は5番目にありました」と表示されます。
02
値の動きを追う
「番目」は先頭を0番目として数えた添字です。1回目は hidari=0、migi=7 なので aida=(0+7)÷2=3。Data[3]=47 は68より小さいので、hidari を4にします。2回目は aida=(4+7)÷2=5。Data[5]=68 が見つかり、basho=5 になって繰り返しが終わります。
| 回 | hidari | migi | aida | Data[aida] | したこと |
|---|---|---|---|---|---|
| 1 | 0 | 7 | 3 | 47 | hidari = 4 |
| 2 | 4 | 7 | 5 | 68 | basho = 5(見つかった) |
03
練習問題
Data[aida] < sagasu のとき、hidari に代入する値として正しいものはどれですか。
- aida
- aida + 1
- aida - 1
- migi
答えと解説を見る
答え 2Data[aida] は探す値より小さいと分かったので、aida の位置はもう調べなくてよくなります。次に探す範囲は aida の1つ右からなので aida + 1 です。aida のままにすると、同じ位置を調べ続けて終わらないことがあります。
04
書き換えて試す
上のPythonのコードを書き換えて、もう一度実行してみましょう。
- sagasu を 50 に変えて実行し、「見つかりませんでした」になることを確かめる
- 繰り返しの中に print(hidari, migi, aida) を足して、範囲が狭まる様子を見る
- Data の数を増やして、調べる回数がどれくらい増えるかを比べる
05
ほかの練習
表記の出典: 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」。問題とデータはLaibraのオリジナルです。