logo
Лекции_ПиОА[1]

9.2. Бинарный поиск

Н

Dim S() As Integer: Const n As Integer = 10, K As Integer = 11

Sub Бинарный_поиск() 'Отладочный вариант

Dim i As Integer, a As Integer, b As Integer, var As String

ReDim S(1 To n): S(1)=2: S(2)=7: S(3)=8: S(4)=9: S(5)=13: S(6)=15: S(7)=16: S(8)=17: S(9)=18: S(10)=23

var = "Исходные:": For j = 1 To n: var = var & " " & Str(S(j)): Next j: MsgBox var: a = 1: b = n:

1: If b <a Then

MsgBox "Неудача": Exit Sub

Else

i = (a + b)\2

If K = S(i) Then: MsgBox "Адрес: " & Str(i) & ". Значение: " & Str(S(i)) & ". Ключ: " & Str(K): Exit Sub

Else: If K < S(i) Then: b = i – 1: Else: a = i + 1: End If

End If

GoTo 1

End If

End Sub

аиболее простым способом поиска является последовательный поиск, в котором производится просмотр подряд всех записей -файла до получения решения задачи. Рассмотрим наиболее употребительный и эффективный способ поиска в упорядоченном массиве. Этот способ имеет несколько названий – бинарный, логарифмический поиск, способ деления пополам. Идея бинарного поиска проста. Ключ сравнивается со значением среднего ключа таблицы. Результат сравнения или приводит к решению задачи, или позволяет определить, в какой части массива (верхняя, нижняя) продолжать поиск. Применяя описанный процесс к наполовину укороченному массиву посредством не более чем log2 n сравнений, получим позитивное или негативное решение. Ниже приводится программа бинарного поиска.