PassFront
  1. PassFront
  2. База знаний
  3. Сортировки и поиск

Что такое стабильность сортировки и какие сортировки стабильны?

Сортировки и поиск

Стабильная сортировка сохраняет относительный порядок элементов с равными ключами; это критично при сортировке по нескольким полям подряд.

Пример

Сортируем сотрудников сначала по имени, затем стабильно по отделу — внутри отдела имена останутся по алфавиту. Нестабильная сортировка этот порядок разрушит.

Какие алгоритмы стабильны

  • Стабильны: merge sort, insertion sort, bubble sort, counting sort в аккуратной реализации, Timsort.
  • Нестабильны: quicksort, heapsort, selection sort.

Как сделать нестабильную сортировку стабильной

Добавить к ключу исходный индекс: сортировать пару (значение, индекс) — равные значения разрешатся по индексу. Цена — O(n) дополнительной памяти.

Где это важно

  • UI-таблицы: пользователь кликает по колонкам и ждёт сохранения предыдущего порядка.
  • Многоступенчатая сортировка записей в отчётах.

Коротко для собеседования

Стабильная сортировка не переставляет элементы с равными ключами, поэтому сортировки по нескольким полям можно применять последовательно. Это важно для UI-таблиц и отчётов; в JS Array.prototype.sort стабилен начиная с ES2019, а нестабильный алгоритм исправляют добавлением индекса к ключу.

Другие вопросы раздела