Алгоритм цифровой сортировки
| НЕТ ВОЙНЕ | 
| 24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России | 
| Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. | 
| meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. | 
В этом алгоритме сортировки числа сортируются по разрядам. Существует два варианта Least Significant Digit (LSD) и Most Significant Digit (MSD). При LSD сортировке, сначала сортируются младшие разряды, затем старшие. При MSD сортировке наоборот.
Алгоритм LSD
Перед сортировкой необходимо определить 2 величины:
- — максимальное количество разрядов в сортируемых величинах.
- — количество возможных значений одного разряда ключа (сортируемого элемента), то есть мощность используемого алфавита.
Создаются вспомогательных списков-корзин, т.е. на каждое возможное значение разряда элемента по корзине.
Первый проход:
Первый этап — распределение по корзинам и на первом проходе элементы исходной последовательности помещаются в эти корзины по их младшему разряду, т.е. по самому правому символу. Какой этот самый младший разряд у элемента, в такую корзину этот элемент и помещается.
Например, пусть имеем исходную последовательность из , для которой определяем = 2, = 10, поэтому будет 10 корзин: . Тогда на первом проходе корзины №0, 2, 3, 5, 7 окажутся пусты, а остальные распределят элементы след. образом:
Второй этап — сборка: просто последовательно соединяем один за другим все корзины и располагаем элементы уже в этой последовательности:
Это был один проход алгоритма, соответствующий крайнему правому разряду ключа. На следующем проходе, элементы из уже обновленной последовательности распределяются по корзинам в соответствии с их вторым(т.е. предпоследним) разрядом и т.д по самого старшего, максимального, -го разряда ключа.
Второй проход:
Первый этап — корзины №3, 4, 6, 8 окажутся пусты, а остальные распределят элементы след. образом:
Второй этап — собираем и получаем отсортированную по возрастанию последовательность:
Время работы
Алгоритм цифровой сортировки работает за линейное время - , где — мощность алфавита(), — максимальная длина строки(), — количество сортируемых строк.
Применение
Алгоритм цифровой сортировки позволяет строить суффиксный массив за , где — длина строки.
Источник
Дональд Кнут Искусство программирования, том 3. Сортировка и поиск = The Art of Computer Programming, vol.3. Sorting and Searching. — 2-е изд. — М.: «Вильямс», 2007. — С. 824. — ISBN 5-8459-0082-4
