1С 8.3 Бинарный поиск в Таблице значений - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Бинарный поиск в Таблице значений

Данные > Примеры кода 1С > 1С 8.3 Таблица значений
Более быстрый вариант поиска по таблице значений
Бинарный поиск (по половинам) в Таблице значений в 1С 8.3 (от пользователя Signum1s-up):
&НаСервере
Процедура БинарныйПоискВТЗ(ТаблицаДляПоиска, ЧислоПоиска)

   ТЗ = ТаблицаДляПоиска.Выгрузить();
   КоличЭлементов = ТЗ.Количество();

   ПервоеЗначениеТЗ = ТЗ[0].Индекс;
   ПоследнееЗначениеТЗ = ТЗ[КоличЭлементов - 1].Индекс;

   ИскомаяСтрокаТЗ = Неопределено;
   КоличИтерацийТЗ = 0;

   Пока КоличИтерацийТЗ < КоличЭлементов Цикл
       КоличИтерацийТЗ = КоличИтерацийТЗ + 1;

       ПоловинноеЗначение = Цел((ПервоеЗначениеТЗ + ПоследнееЗначениеТЗ)/2);

       Если ЧислоПоиска > ПоловинноеЗначение Тогда
           ПервоеЗначениеТЗ = ПоловинноеЗначение;
       ИначеЕсли ЧислоПоиска < ПоловинноеЗначение Тогда
           ПоследнееЗначениеТЗ = ПоловинноеЗначение;
       Иначе
           ИскомаяСтрокаТЗ = ТЗ[ПоловинноеЗначение -1];
           Прервать;
       КонецЕсли;

   КонецЦикла;

   Если Не ИскомаяСтрокаТЗ = Неопределено Тогда
       Сообщить("Строка найдена, значение поля индекс " + ИскомаяСтрокаТЗ.Индекс + "
    |Количество итераций в цикле ТЗ: " + КоличИтерацийТЗ);
   КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура БинарныйПоискНаКлиенте(Команда)

   Если ТаблицаДляПоиска.Количество() = 0 Тогда
       Сообщить("Таблица для поиска пустая");
       Возврат;
   КонецЕсли;

   БинарныйПоискВТЗ(ТаблицаДляПоиска, ЧислоПоиска);

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 28.12.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому