![]() |
![]() |
virt |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Описание и реализация алгоритмов:
****** ****** Сравнительная скорость работы некоторых нижеприведенных алгоритмов сортировки: ![]() Примечание: size: размер сортируемой последовательности n: количество сортировок для замера времени *: RadixSort в последнем тесте прогонялся при параметрах: size=21000; n=100 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Распределяющая сортировка - RadixSort - цифровая - поразрядная
Пусть имеем максимум по k байт в каждом ключе (хотя за элемент сортировки вполне можно принять и что-либо другое, например слово - двойной байт, или буквы, если сортируются строки). k должно быть известно заранее, до сортировки. Разрядность данных (количество возможных значений элементов) - m - также должна быть известна заранее и постоянна. Если мы сортируем слова, то элемент сортировки - буква, m = 33. Если в самом длинном слове 10 букв, k = 10. Обычно мы будем сортировать данные по ключам из k байт, m=256. Пусть у нас есть массив source из n элементов по одному байту в каждом. Для примера можете выписать на листочек массив source = <7, 9, 8, 5, 4, 7, 7>, и проделать с ним все операции, имея в виду m=9.
Итак, мы научились за O(n) сортировать байты. А от байтов до строк и чисел - 1 шаг. Пусть у нас в каждом числе - k байт. Будем действовать в десятичной системе и сортировать обычные числа ( m = 10 ). Цитата сначала они в сортируем по младшему на один беспорядке: разряду: выше: и еще раз: 523 523 523 088 153 153 235 153 088 554 153 235 554 235 554 523 235 088 088 554 Hу вот мы и отсортировали за O(k*n) шагов. Если количество возможных различных ключей ненамного превышает общее их число, то 'поразрядная сортировка' оказывается гораздо быстрее даже 'быстрой сортировки'! Реализация алгоритма "распределяющей" сортировки: Скачать: ![]() Const |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 17:18 |