二分探索

二分探索

ソート済み配列への探索アルゴリズム

1. 探索パターン
有効な配列範囲 下限値 (Ka) 上限値 (Jo) 探索区間
配列(1) ~ 配列(n) 1 n [1, n](閉区間
配列(0) ~ 配列(n) 0 n [0, n](閉区間
配列(1) ~ 配列(n)
(下限の初期値を0とする場合)
第69回【4】問2
0 n + 1 [1, n + 1)(半開区間
2. 閉区間

📦配列(1) ~ 配列(n) 【1 ≦ index ≦ n を探索】

0
1
2
3
...
n-1
n
   '初期値   
    Ka = 1                  '下限値
    Jo = n                  '上限値
    m = Int((Ka + Jo) / 2) '中央値

📦配列(0) ~ 配列(n) 【0 ≦ index ≦ n を探索】

0
1
2
3
...
n-1
n
   '初期値   
    Ka = 0                  '下限値
    Jo = n                  '上限値
    m = Int((Ka + Jo) / 2) '中央値
閉区間(m を除外する)
[ Ka ... m ... Jo ]
[ Ka ... m - 1 ]
[ m + 1 ... Jo ]

中央値 m は探索済みのため、 探索範囲から除外する。
💡サンプルコード
    Dim star(8) As String
    Dim Ka As Integer
    Dim Jo As Integer
    Dim m As Integer
    Dim key As String

    star(1) = "おうし座"
    star(2) = "かに座"
    star(3) = "さそり座"
    star(4) = "しし座"
    star(5) = "てんびん座"
    star(6) = "みずがめ座"
    star(7) = "やぎ座"
    star(8) = "おとめ座"

    key = "しし座"

    Ka = 1
    Jo = 8

    '探索区間 1 ≦ index ≦ n   (n = 8)
    Do While Ka <= Jo

        m = Int((Ka + Jo) / 2)

        If key = star(m) Then
            Debug.Print "見つかりました : " & m
            Exit Sub

        ElseIf key < star(m) Then
            Jo = m - 1

        Else
            Ka = m + 1

        End If

    Loop

    Debug.Print "見つかりません"

動画で学習

3. 半開区間

📦配列(1) ~ 配列(n)・下限の初期値 = 0  【1 ≦ index < n +1 を探索】

0
1
2
3
...
n-1
n
   '初期値   
    Ka = 0                  '下限値
    Jo = n + 1              '上限値
    m = Int((Ka + Jo) / 2) '中央値
半開区間(m を境界として残す)
( Ka ... m ... Jo )
( Ka ... m )
( m ... Jo )

中央値 m を境界として残しながら、 探索範囲を縮小する。
💡サンプルコード
    Dim star(8) As String
    Dim Ka As Integer
    Dim Jo As Integer
    Dim m As Integer
    Dim key As String

    star(1) = "おうし座"
    star(2) = "かに座"
    star(3) = "さそり座"
    star(4) = "しし座"
    star(5) = "てんびん座"
    star(6) = "みずがめ座"
    star(7) = "やぎ座"
    star(8) = "おとめ座"

    key = "しし座"

    Ka = 0
    Jo = 9

    '探索区間 1 ≦ index < n + 1   (n = 8)
    Do While Ka + 1 < Jo

        m = Int((Ka + Jo) / 2)

        If key = star(m) Then
            Debug.Print "見つかった"
            Exit Sub

        ElseIf key < star(m) Then
            Jo = m

        Else
            Ka = m

        End If

    Loop

    Debug.Print "見つかりません"

動画で学習

4. 過去問【4】

📦出力画面

第72回【4】問1_01
第72回【4】問1_02


📘 ダウンロード教材について

この教材は、全国商業高等学校協会の情報処理検定の過去問題をもとに作成された、
学習支援用のマクロ付きExcelファイルです。

  • マクロは 売上集計や平均点の計算など、検定形式に沿った処理を行います。
  • 外部との通信やファイル操作は一切行いません。
  • 教育目的で無償提供しており、改変・再配布はご遠慮ください。

ご利用の際は、マクロを有効にする必要があります。学校のPCで使用する場合は、先生にご確認ください。

ファイル名 サイズ (KB) ダウンロード
第72回【4】問1.zip 14
第69回【4】問2.zip 14
第67回【4】問1.zip 14

戻る


© 2026 - Blazor 情処の味方

サポーターズ
Thread Light
An unhandled error has occurred. Reload 🗙