Counting Sort Средний ~26 мин чтения

Counting Sort

Урок 8 из 10 в курсе Алгоритмы. Старт.

Interactive

Counting Sort Visualizer

Введите числа и управляйте пошаговым выполнением алгоритма.

sorting

История шагов

Counting Sort

Counting Sort — не сравнительная сортировка, которая считает количество каждого значения.

Основная идея

Создаём массив частот, затем восстанавливаем отсортированный массив по счётчикам.

Пошаговый пример

Исходный массив:

[4, 2, 2, 8, 3, 3, 1]
  1. Считаем частоты каждого числа
  2. Идём по массиву частот слева направо
  3. Записываем элементы в отсортированный массив

Псевдокод

counts = array(max_value - min_value + 1, 0)
for value in arr:
    counts[value - min_value] += 1
index = 0
for number, count in counts:
    repeat count times:
        arr[index] = number + min_value
        index += 1

Оптимизация: Эффективен, когда диапазон значений небольшой по сравнению с n.

Сложность

Время O(n + k), где k — диапазон значений.
Память O(k).

Когда используется

  • Целочисленные ключи малого диапазона
  • Предобработка для radix sort
  • Подсчёт частот

Ключевые свойства

  • Стабильность зависит от реализации
  • Не сравнительный
  • Очень быстрый в своей нише