Спагетти-сортировка ver.2Она же «Spaghetti sort» ― относится к классу «Параллельных сортировок». Представим массив неотсортиронных чисел в виде пучка из сухих спагетти соответствующей длины. Установим спагетти вертикально на ровной поверхности. Сверху на спагетти опускается пресс, пока не встретится с самой длинной макарониной. Удаляем эту спагеттину и вставляем ее в конец (изначально пустого) массива отсортированных спагетти. Каждый раз, когда пресс касается очередной макаронины, фиксируем очередной отсортированный элемент и удаляем его из массива неотсортированных элементов. Повторяем, пока все спагетти не будут отсортированы. Худшая, средняя и лучшая сложность по времени [math]O(n)[/math] В аттаче asm-/rc-/exe-файлы и курсор
Сортировка вставками. Румынский танец Merge-sort with Transylvanian-saxon (German) folk dance Быстрая сортировка. Венгерский танец
Мой вариант: Объединил все алгоритмы сортировок в одну dll, как и другие вспомогательные функции для работы с массивами. Теперь новые алгоритмы сортировок можно добавлять туда, без необходимости перекомпилировать исходную программу (при условии, что туда заранее импорты будущих сортировок засунуть ). Ну и сделал программку для визуализации на свой вкус, пока выбрать конкретную сортировку нельзя (как и уменьшить задержку между перестановками, сейчас 40мс), всегда сортирует вставками, но скоро добавлю такой функционал. Элементы отображаю с помощью Rect, а не LineTo, но градиент подсмотрел у Mikl___ https://github.com/babasuck/sortVisualisation
Внес некие изменения: 1) Избавился от мерцания формы при сортировке - за счет добавления технологии двойной буферизации. Теперь за отрисовку графики отвечает отдельный поток, который в бесконечном цикле 60 раз в секунду перерисовывает форму с двойным буфером (через CreateCompatibleDC и CreateCompatibleBitmap, а потом копирование во внешний контекст устройства), подсмотрел у Mikl___ и доработал 2) Избавился от утечек памяти (Не удалял кисточки в двух местах, в итоге программа через 3 минуты работы ложилась ) 3) Т.к. теперь форма обновляется отдельным потоком нет смысла запрашивать перерисовку через InvalidateRect, убрал из dll эту функцию в сортировках, теперь она полностью независима от головной программы. https://github.com/babasuck/sortVisualisation
Доделал до конца, убрал границу у элементов, теперь создается красивый градиент после сортировки, добавил еще алгоритмов, по прежнему реализуются в alglib.dll Функционал программы: 1) Визуализация сортировки - ЛКМ 2) Перемешивание массива - ПКМ 3) Выбор алгоритма сортировки - стрелки вправо и влево Алгоритмы: bubble, shaker, insertion, selection, quick, merge
Была ошибка со стеком, исправил. Теперь selection и insertion работает. (Не заметил ошибки, потому что на моем компьютере работало, а на другом нет )