# 情報I / 共通テスト

二分探索を共通テストの表記とPythonで読む

並んだデータの真ん中を見て、探す範囲を半分ずつ狭めていく方法です。添字の動きを追えるかがポイントです。

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 になって繰り返しが終わります。

回hidarimigiaidaData[aida]したこと
107347hidari = 4
247568basho = 5(見つかった)

03

練習問題

Data[aida] < sagasu のとき、hidari に代入する値として正しいものはどれですか。

  1. aida
  2. aida + 1
  3. aida - 1
  4. migi
答えと解説を見る

答え 2Data[aida] は探す値より小さいと分かったので、aida の位置はもう調べなくてよくなります。次に探す範囲は aida の1つ右からなので aida + 1 です。aida のままにすると、同じ位置を調べ続けて終わらないことがあります。

04

書き換えて試す

上のPythonのコードを書き換えて、もう一度実行してみましょう。

  • sagasu を 50 に変えて実行し、「見つかりませんでした」になることを確かめる
  • 繰り返しの中に print(hidari, migi, aida) を足して、範囲が狭まる様子を見る
  • Data の数を増やして、調べる回数がどれくらい増えるかを比べる

05

ほかの練習

表記の出典: 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」。問題とデータはLaibraのオリジナルです。

# LET'S TRY

読めたら、次は書いてみよう。

無料でPythonを始める

変数・条件分岐・繰り返しから、ブラウザで順番に練習できます。

無料で利用できる範囲・有料プランは料金案内をご確認ください。