Продолжим изучать сортировку массивов? Начало в статьях №130 и 131. Давайте рассмотрим так называемый метод быстрой сортировки.
Этот макрос СоздатьМассивОбратногоПорядка создает массив чисел в обратном порядке. То есть я как пользователь захотел например создать массив из 1 миллиона элементов, но в обратном порядке: 1000000, 999999, 999998…3, 2, 1. Дальше «загнать массив» в столбец А. После чего вызывается процедура БыстраяСортировка, которая сортирует массив в столбец Б порядке возрастания. Заканчивается тем, что показывает пользователю время, затраченное на всё выполнение.
Как всегда, на макрос я назначил большую зелёную кнопку. Вот как это выглядит:
📌 Скачать файл пример с макросом можно в конце статьи
Если помните в статье №130 сортировка массива в миллион элементов на рабочем листе заняла около 8 секунд, здесь же менее 2.
Макрос создает массив чисел в обратном порядке, а затем сортирует его с использованием алгоритма быстрой сортировки. Давайте разберем его шаги:
- Очистка диапазона: Сначала макрос очищает столбцы "A" и "B" на листе, чтобы гарантировать, что они пусты перед заполнением новыми данными.
- Ввод количества элементов: Пользователю предлагается ввести количество элементов массива с помощью диалогового окна.
- Проверка ввода: Если количество элементов меньше 1, выводится сообщение об ошибке, и макрос завершает свою работу.
- Заполнение массивов: Создаются два массива - Массив1 и МассивЧисел. Массив1 заполняется числами от Элементы до 1, а МассивЧисел копирует значения из Массив1.
- Заполнение столбца A: Массив Массив1 помещается в столбец "A" на листе Excel.
- Засекаем время: Фиксируется текущее время до начала сортировки.
- Сортировка массива чисел: Массив МассивЧисел сортируется в порядке возрастания с использованием алгоритма быстрой сортировки.
- Заполнение столбца B: Отсортированный массив МассивЧисел помещается в столбец "B" на листе Excel с помощью транспонирования.
- Вычисление времени сортировки и вывод сообщения: Фиксируется текущее время после сортировки, и выводится сообщение с временем, затраченным на сортировку массива, в диалоговом окне.
В дополнение ещё процедура БыстраяСортировка. Находится в том же модуле.
Как видно на скриншоте, практически каждое действие имеют пояснения (зеленым), но все же коротко:
- Объявление переменных: Здесь определяются переменные для индексов начала и конца подмассива, опорного элемента и временной переменной для обмена элементов.
- Инициализация переменных: Начальные значения переменных устанавливаются на основе переданных параметров функции. Опорный элемент выбирается как средний элемент подмассива.
- Процесс сортировки: Здесь выполняется основной процесс сортировки. Используя два указателя, мы ищем элементы в левой и правой частях подмассива, которые нужно поменять местами. Как только такие элементы найдены, они обмениваются местами.
- Рекурсивные вызовы: После завершения этапа сортировки подмассива, рекурсивно вызывается функция сортировки для левого и правого подмассивов, если они содержат более одного элемента.
Как видим макрос продолжает делить массив на более мелкие подмассивы и сортировать их, пока весь массив не будет отсортирован.
Алгоритм такой сортировки работает очень быстро, но ограничен типами данных Integer и Long.