DEV//UNIT

Поразрядная сортировка

Сортировка по разрядам — единицам, десяткам, сотням — устойчивыми проходами подсчёта.

время O(d·(n + b))память O(n + b)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function radixSortLSD(a: number[]): number[] {
2 const max = Math.max(...a)
3
4 for (let exp = 1; Math.floor(max / exp) > 0; exp *= 10) {
5 countingByDigit(a, exp)
6 }
7 return a
8}
9
10function countingByDigit(a: number[], exp: number): void {
11 const counts = new Array(10).fill(0)
12 for (const v of a) counts[digit(v, exp)]++
13
14 for (let d = 1; d < 10; d++) counts[d] += counts[d - 1]
15
16 const out = new Array(a.length)
17 for (let i = a.length - 1; i >= 0; i--) {
18 const d = digit(a[i], exp)
19 out[--counts[d]] = a[i]
20 }
21 for (let i = 0; i < a.length; i++) a[i] = out[i]
22}
23
24function digit(v: number, exp: number): number {
25 return Math.floor(v / exp) % 10
26}

Проблема

Отсортировать много целых чисел быстро и без сравнений. Сравнительные методы упираются в O(n log n) — нижняя граница сравнений. Целые числа с узкими разрядами можно сортировать быстрее.

Что вы видите

Столбики. Проход по разряду единиц — числа перегруппировываются по цифре; проход по десяткам — уже не ломает порядок единиц; сотни — финал. Каждый проход — устойчивая раскладка подсчётом.

Как это работает

LSD-схема: сортируем по младшему разряду, затем по следующему — устойчивость проходов копит порядок. d разрядов × O(n + 10) на проход = O(d·n). Ни одного «меньше-больше» между элементами.

Пошаговый разбор

  1. 01

    Проход

    Устойчивая сортировка подсчётом по текущему разряду.

  2. 02

    Устойчивость

    Равные цифры сохраняют прошлый порядок.

  3. 03

    Разряды

    Единицы → десятки → сотни.

  4. 04

    Финал

    Полный порядок после старшего разряда.

Complexity и ограничения

time
O(d·(n + b))
space
O(n + b)

Целые (или отображаемые в разряды). d = число разрядов максимума. Память O(n + b).

Edge cases

  • Все одинаковые

    Один проход фактически решает.

  • Разной длины

    Младшие разряды отсутствующих = 0.

  • Отрицательные

    Сдвигом или отдельным знаком.

Где встречается в реальности

Гигантские выборки

Миллионы int-ключей — стандартный выбор поразрядной.

Суффиксные массивы

Построение через поразрядные проходы.

Соревнования

Классика ускорения на больших n.

Связанные алгоритмы

Shorts

«Сортировка, которая ничего не сравнивает»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Сортировка, которая ничего не сравнивает
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/radix-sort