Все темы
34

Сортировка обменом соседей

Tier 1Закрыто

Где применяется

1. Задача

У тебя короткий список чисел в случайном порядке, а нужен он от меньшего к большему. В сортировке выбором ты мог поменять местами любые две ячейки, даже далёкие друг от друга.

Здесь правило жёстче. Сравнивать можно только два числа, которые стоят рядом. Единственное разрешённое действие: поменять эту пару местами. Перескакивать через ячейки нельзя. Хватит ли только этого, чтобы отсортировать весь список?

Пусть в таблице лидеров лежит [5, 1, 4, 2, 8], а нужно получить [1, 2, 4, 5, 8]. За раз ты смотришь на одну пару соседей и меняешь её местами, если она стоит в обратном порядке.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

Как узнать

Элементарные сортировки (выбором, пузырьком, вставками) (Elementary sorts (selection, bubble, insertion))

Эти слова в условии значат этот паттерн

  • n маленькое (десятки или пара сотен)
  • массив уже почти отсортирован
  • сортировка на месте с O(1) дополнительной памяти
  • учебный/собеседовательный вопрос о механике сортировки
  • важна стабильность, а простота приемлема

Похоже, но не то

n примерно до 5000 нормально при O(n в квадрате). На почти отсортированных данных вставки дают O(n).

На LeetCode

Задачи, где сравниваются только соседи, например проверка, что список упорядочен, или сортировка короткого списка обменом соседних элементов. Проход без единой неправильной пары доказывает, что список отсортирован.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности