Бесплатная бета: 60 дней полного доступа, без карты.мест осталось: 120Зарегистрироваться бесплатно

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

Все паттерны

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

Elementary sorts (selection, bubble, insertion)

O(n^2)

Сортировки выбором, пузырьком и вставками сравнивают соседей и меняют их местами. Все три стоят O(n в квадрате) на перемешанных данных.

Обновлено 24 авг. 2026 г.

Элементарные сортировки (выбором, пузырьком, вставками): как это работает?

Все три держат отсортированную часть и неотсортированную. Каждый раунд переносит через границу один элемент.

Сортировка выбором ищет в неотсортированной части минимум. Она меняет его местами с нужной позицией.

Пузырёк сравнивает соседние пары и меняет их при нарушении порядка. Наибольшее значение уплывает в конец.

Вставки берут следующий элемент и двигают его влево. Движение прекращается, как только сосед меньше.

Знать стоит именно вставки. На почти отсортированных данных они почти ничего не делают.

Все три работают на месте с O(1) памяти. Вставки и пузырёк устойчивы, выбор нет.

  1. [5 | 2, 4, 1]Сортировка вставками. Отсортирован пока только первый элемент.
  2. [2, 5 | 4, 1]Двойка проходит мимо пятёрки. Два элемента упорядочены.
  3. [2, 4, 5 | 1]Четвёрка проходит мимо пятёрки и встаёт после двойки.
  4. [1, 2, 4, 5]Единица уезжает в самое начало. Это самый дорогой ход здесь.
  5. 3 раундаПочти отсортированный вход стоит одного сравнения на элемент. Сдвигов не будет вовсе.

Элементарные сортировки (выбором, пузырьком, вставками): шаблон кода

function insertionSort(arr) {
    for (let i = 1; i < arr.length; i++) {
        const key = arr[i];
        let j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
    return arr;
}

Элементарные сортировки (выбором, пузырьком, вставками): разбор примера

Сортировка вставками на связном списке

Дан односвязный список, его надо отсортировать вставками.

Перевязывать узлы можно. Копировать значения в массив нельзя.

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

Для каждого узла идите по отсортированному списку с начала, пока следующее значение не станет больше. Там и вставляйте.

function insertionSortList(head) {
    const dummy = new ListNode(0);
    let node = head;

    while (node) {
        const next = node.next;

        // walk from the front each time: the sorted part has no back links
        let prev = dummy;
        while (prev.next && prev.next.val < node.val) {
            prev = prev.next;
        }

        node.next = prev.next;
        prev.next = node;
        node = next;
    }

    return dummy.next;
}

Элементарные сортировки (выбором, пузырьком, вставками): когда применять?

Эти формулировки в условии ведут сюда:

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

Элементарные сортировки (выбором, пузырьком, вставками): с чем путают?

Элементарные сортировки (выбором, пузырьком, вставками): частые ошибки

  • По привычке берут пузырёк

    Он делает больше всех работы при том же классе сложности. Вставки лучше по умолчанию.

  • Сортируют так большой вход

    При n в 1e5 квадрат это 1e10 операций. Возьмите встроенную сортировку.

  • Ведут внутренний цикл до нулевого индекса

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

  • Берут выбор там, где важны равные ключи

    Дальний обмен может перекинуть равные ключи друг через друга. Вставки сохраняют их исходный порядок.

Элементарные сортировки (выбором, пузырьком, вставками): задачи с собеседований

  • Отсортировать массив: Любой из трёх хватает при нескольких тысячах элементов.
  • Сортировка вставками на списке: Тот же цикл, но по узлам, а не по ячейкам.
  • Сортировка цветов: Значений всего три, поэтому один проход бьёт любую сортировку сравнением.
  • Почти отсортированный массив: Вставки линейны, когда каждый элемент близко к своему месту.
  • Проверка роста в шеренге: Сравните ряд с его же отсортированной копией.
  • Сортировка по чётности: Это разбиение, а не полная сортировка.
  • Первое пропущенное положительное: Циклическая сортировка ставит каждое значение на свой индекс.

Элементарные сортировки (выбором, пузырьком, вставками): сложность по времени и памяти

O(n^2)

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

Где этот паттерн стоит в 150 шагах