Сортировка массивов в 1С

О различных способах сортировки массивов в 1С наверняка написано уже немало статей. Я решил написать еще одну.

Здесь я не буду расписывать все существующие методы сортировки массивов, которых достаточно много, а просто покажу и сравню два основных, на мой взгляд метода — пузырьковый (тот, который в школах/университетах изучают) и быстрый (самый оптимальный, на мой взгляд).

Итак, вот небольшая функция, которая создает массив заданного размера:

Отсортируем полученный массив пузырьковым алгоритмом:

Теперь отсортируем быстрым алгоритмом:

Теперь перейдем к результатам — массив из 1000 элементов:

Сортировка массивов в 1С (1000 элементов)
Сортировка массивов в 1С (1000 элементов)

10000 элементов:

Сортировка массивов в 1С (10000 элементов)
Сортировка массивов в 1С (10000 элементов)

Результаты, я думаю, говорят сами за себя: при увеличении количества элементов массива в 10 раз, время сортировки быстрым алгоритмом также увеличилось приблизительно в 10 раз, в том время как время сортировки пузырьковым алгоритмом увеличилось приблизительно в 100 раз.

4 комментария к “Сортировка массивов в 1С

  1. 100000 элементов:

    Процедура СортировкаЧерезТЗ(Кнопка)

    массив = ПолучитьМассивЭлементов();

    тДатаНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();

    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить(«Цифра», Новый ОписаниеТипов(«Число»));
    Для тСчет = 0 По фЧислоЭлементов-1 Цикл //фЧислоЭлементов — это поле на форме
    нСтрока = тз.Добавить();
    нСтрока.Цифра = Массив[тСчет];
    КонецЦикла;

    тз.Сортировать(«Цифра»);
    массив = тз.ВыгрузитьКолонку(«Цифра»);

    тДатаОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах();
    Сообщить(«Время работы (тз): «+(тДатаОкончания-тДатаНачала)+» мс.»);

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

    Время работы (тз): 1 906 мс.
    Время работы (быстрая): 42 734 мс.

  2. Нда…

    1 000 000 (миллион) записей

    СписокЗначений = Новый СписокЗначений;
    СписокЗначений.ЗагрузитьЗначения(Массив);
    СписокЗначений.СортироватьПоЗначению();

    Возврат СписокЗначений.ВыгрузитьЗначения();

    Время работы: ~ 3,26 сек
    Время работы (ТЗ): ~ 53,27 сек
    Время работы (быстрая): даже не замерял

  3. СписокЗначений.СортироватьПоЗначению(); это оч тормозная хрень у меня пара тысяч
    элементов сортирует 16 сек

Оставить комментарий