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

 

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

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

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

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

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

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

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

10000 элементов:

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

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

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 2, средняя оценка: 3,00 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 6
  1. Дмитрий

    100000 элементов:

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

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

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

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

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

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

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

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

  2. Ростислав

    Нда…

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

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

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

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

  3. Николай

    Полезная публикация, спасибо!

  4. андрей

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

  5. Дмитрий

    Ростислав , вот именно! :idea: Но люди не ищут лёгких путей! ;-)

  6. Lef

    Надо попробовать корзинную сортировку, еще
    Она быстрая и линейно — зависима от количества элементов, а, также, сортирует одинаковое время любые массивы — неоптимальна для частично отсортированных массивов и весьма оптимальна для совсем неотсортированных поскольку время сортировки всегда одинаково
    Также, ее недостатки:
    1) Конский жор памяти(поскольку, делаются копии массивов);
    2) слова ей сортировать неоптимально поскольку большое количество корзин(и, как следствие, много памяти)
    Но, вот, в данном случае на больших числовых массивах с высоким коэффициентом энтропии она, возможно, выиграет, даже, у сортировки по Хоару(здесь: быстрая)

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: