403
правки
Изменения
м
Нет описания правки
[[Файл:Radix.gif|thumb|right|590px|Пример цифровой сортировки]]
'''Цифровая сортировка''' — алгоритм один из алгоритмов сортировки за линейное время, использующих внутреннюю структуру сортируемых объектов.==Алгоритм==При цифровой сортировке данные разбиваются на "разряды", после этого данные чего они сортируются какой-либо устойчивой сортировкой по каждому разряду, в порядке от младшего разряда к старшему.Для чисел наиболее часто в качестве устойчивой сортировки применяют [[сортировка подсчетом|сортировку подсчетом]]. ==Сложность= Корректность алгоритма ===Докажем, что данный алгоритм работает верно, используя метод математической индукции по номеру разряда. Для простоты рассуждений будем предполагать, что объекты сортируются по неубыванию. Пусть <tex>kn </tex> {{- --}} количество разрядовв сортируемых объектах.*База: <tex> n = 1 </tex>. Очевидно, что алгоритм работает верно, потому что в таком случае мы просто сортируем младшие разряды какой-то заранее выбранной стабильной сортировкой.*Переход: Пусть для <tex> n = k </tex> алгоритм правильно отсортировал элементы по <tex> k </tex> младшим разрядам. Покажем, что в таком случае, при сортировке по <tex> (k + 1) </tex>- количество входных данныхому разряду, объекты также будут отсортированы в правильном порядке. Вспомогательная сортировка разобьет все объекты на группы, в которых <tex>T(nk + 1)</tex> - сложность устойчивой ый разряд объектов одинаковый. Рассмотрим такие группы. Для сортировкипо отдельным разрядам мы используем стабильную сортировку, тогда сложность цифровой сортировки следовательно порядок объектов с одинаковым <tex> (k + 1) </tex>- ым разрядом не изменился. Но по предположению индукции по предыдущим <tex> k </tex> разрядам объекты были отсортированы правильно, и поэтому в каждой такой группе объекты будут отсортированы верно. Также верно, что сами группы находятся в правильном относительно друг друга порядке, а следовательно и все элементы отсортированы правильно по <tex>О(k*T(n)+ 1)</tex>.При использовании сортировки подсчетом получаем линейную зависимость-ым младшим разрядам.==Псевдокод==
Radix_sort
for i = 1 to m
do устойчивая сортировка массива по i-ому разряду
==Сложность==
Пусть <tex>k</tex> - количество разрядов, n - количество входных данных, <tex>T(n)</tex> - сложность устойчивой сортировки, тогда сложность цифровой сортировки - <tex>О(k*T(n))</tex>.
При использовании сортировки подсчетом получаем линейную зависимость.
== Литература ==