Алгоритм цифровой сортировки — различия между версиями
Строка 1: | Строка 1: | ||
− | В этом алгоритме сортировки числа сортируются по разрядам. Существует два варианта | + | В этом алгоритме сортировки числа сортируются по разрядам. Существует два варианта Least Significant Digit (LSD) и Most Significant Digit (MSD). При LSD сортировке, сначала сортируются младшие разряды, затем старшие. При MSD сортировке наоборот. |
== Алгоритм LSD== | == Алгоритм LSD== |
Версия 08:38, 7 июня 2011
В этом алгоритме сортировки числа сортируются по разрядам. Существует два варианта 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