powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск в массиве
5 сообщений из 5, страница 1 из 1
Поиск в массиве
    #33539012
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер знатоки!!!
Задача такова: Есть отсартированный по алфавиту строковый массив надо найти в нем определенную строку. Как это сделать максимально быстро. Перебором довольно долго. Есть другой метод?
Подскажите пожалуйста!!
...
Рейтинг: 0 / 0
Поиск в массиве
    #33539307
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если самая дорогая операция - это сравнение, то бинарным поиском
...
Рейтинг: 0 / 0
Поиск в массиве
    #33539325
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите это как?
...
Рейтинг: 0 / 0
Поиск в массиве
    #33539903
Да, линейный поиск самый медленный из всех возможных вариантов поиска.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Function fnBinarySearch( _
  varItems As Variant, _
  varFound As Variant) As Integer
  
    Dim intLower As Integer
    Dim intMiddle As Integer
    Dim intUpper As Integer
    
    intLower = LBound(varItems)
    intUpper = UBound(varItems)
    
    Do While intLower < intUpper
        intMiddle = (intLower + intUpper) \  2 
        
        If varFound > varItems(intMiddle) Then
            intLower = intMiddle +  1 
        Else
            intUpper = intMiddle
        End If
    Loop
    
    If varItems(intLower) = varFound Then
        fnBinarySearch = intLower
    Else
        fnBinarySearch = - 1 
    End If
End Function

Sub Test()
    Dim avarItems( 4 ) As Variant
    Dim intPos As Integer

    avarItems( 0 ) = "ААА"
    avarItems( 1 ) = "БББ"
    avarItems( 2 ) = "ВВВ"
    avarItems( 3 ) = "ГГГ"
    avarItems( 4 ) = "ДДД"
    
    intPos = fnBinarySearch(avarItems, "ДДД")
    
    If intPos = - 1  Then
        Debug.Print "Соответствий не найдено."
    Else
        Debug.Print avarItems(intPos); " найден в позиции"; intPos
    End If
End Sub
...
Рейтинг: 0 / 0
Поиск в массиве
    #33541812
glazz_gms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, надо будет попробывать
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск в массиве
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]