Небольшое предисловие)
В основу алгоритма положен метод первичного распределения исходных данных по группам и по матрицам. Далее уже идет досортировка.
Алгоритм или как все это работает:
Плюсы и минусы:
Во вложенном файле несколько модулей:
Примеры вызова процедуры (вдруг кто не знает):
В коде есть комментарии. Модуль с набором процедур сортировщика можно экспортировать и вставить в Ваши проекты.
Тема, где все это рождалось:
Скрытый текст |
|---|
| Так уж получилось, что мне редко когда нравятся утвержденные стандарты и общепринятые алгоритмы. Все началось со стандартного Excel сортера, а точнее с попытки найти ему альтернативу в рабочем файле весом порядка 20 мб, с парой десятков листов нашпигованных формулами, и примерно таким же количеством VBA модулей. Excel сортировщик - это мощный инструмент с множеством опций и пр., но у него есть один недостаток - привязка к листу. Т.е. если вдруг возникла необходимость промежуточной сортировки массива, то нужно либо в текущем файле создавать лист, выгружать данные, сортировать, загружать обратно в массив, удалять лист. Либо создавать новую книгу со всеми выше описанными манипуляциями. Не очень удобно... И понеслось: "пузырьки" во всех их ипостасях, "вставки" и пр.. У всех методов сортировки есть свои плюсы и минусы. Какие-то слишком долгие, другие (например QuickSort) не совсем подходят для двумерных массивов ввиду небрежного отношения к индексам. Вот и решил написать свой вариант. Сильно помог AAF со своим вариантом сортировщика. |
Алгоритм или как все это работает:
Скрытый текст |
|---|
| - анализируется содержимое опорного столбца (по которому идет сортировка) на типы данных в нем представленных: числа (отрицательные и положительные), даты, текст. - в зависимости от типа данных подключаются субсортеры заточенные на определенный вид данных - далее распределение по деревьям/матрицам и досортировка - на финише сборка и деиндексация массива с перезаписью основного (входного) массива. |
Скрытый текст |
|---|
| + на данных с равномерным распределением по значению этот метод идеален, т.е. линейное время сортировки. Зачастую время оценки входных данных больше времени самой сортировки - на числовых данных с малым интервалом по значению образующих своеобразные кластеры - уже все не так радужно - большой объем кода, как говорится: "без стакана не разберешься". Со стаканом спрочем тоже... |
Скрытый текст |
|---|
| - Arr_sorters_test - тестовый стенд для оценки и сравнения описываемого здесь метода с другими - Clever_AAF_ - первоначальная версия распределителя с сотрировщиком AAF - CleverSort_UPD_ - итоговая версия, где труженнику от AAF поручена досортировка текста - TXT_Sorters - пара альтернативных версий для сортировки текста. |
Скрытый текст | ||
|---|---|---|
qwerty - сортируемый массив. |
В коде есть комментарии. Модуль с набором процедур сортировщика можно экспортировать и вставить в Ваши проекты.
Тема, где все это рождалось:
Изменено: - 09.02.2018 00:00:09