![]() |
![]() |
virt |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Описание и реализация алгоритмов:
****** ****** Сравнительная скорость работы некоторых нижеприведенных алгоритмов сортировки: ![]() Примечание: size: размер сортируемой последовательности n: количество сортировок для замера времени *: RadixSort в последнем тесте прогонялся при параметрах: size=21000; n=100 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Древесная сортировка (TreeSort)
Использует Двоичные (бинарные) деревья, в которых для каждого предшественника выполнено следующее правило: левый преемник всегда меньше, а правый преемник всегда больше или равен предшественнику. При добавлении в дерево нового элемента его последовательно сравнивают с нижестоящими узлами, таким образом вставляя на место: если элемент >= корня - он идет в правое поддерево, сравниваем его уже с правым сыном, иначе - он идет в левое поддерево, сравниваем с левым, и так далее, пока есть сыновья, с которыми можно сравнить. Если мы будем рекурсивно обходить дерево по правилу "левый сын -> родитель -> правый сын", то, записывая все встречающиеся элементы в массив, мы получим упорядоченное в порядке возрастания множество. Hа этом и основана идея сортировки деревом. Более подробно правило обхода можно сформулировать так: обойти левое поддерево -> вывести корень -> обойти правое поддерево, где рекурсивная процедура 'обойти' вызывает себя еще раз, если сталкивается с узлом-родителем и выдает очередной элемент, если у узла нет сыновей. Const n = 8; Общее быстродействие метода O(n*logn). Поведение неестественно, устойчивости, вообще говоря, нет. Основной недостаток этого метода - большие требования к памяти под дерево. Очевидно, нужно n места под ключи и, кроме того, память на 2 указателя для каждого из них. Поэтому TreeSort обычно применяют там, где:
Прикрепленные файлы ![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 17:38 |