ENIGMA AI
ENIGMA AI

Какова временная сложность алгоритма сортировки пузырьком?

встречается 3× junior algorithms

Как ответить

Сортировка пузырьком имеет временную сложность O(n²) в худшем и среднем случае, и O(n) в лучшем (если массив уже отсортирован и используется оптимизация с флагом). Пространственная сложность — O(1), так как сортировка выполняется на месте.

Алгоритм проходит по массиву, попарно сравнивая соседние элементы и меняя их местами, если они расположены в неправильном порядке. После каждого прохода самый большой элемент «всплывает» в конец. В классическом варианте без оптимизации всегда выполняется n-1 проходов, каждый проход — от n-1 до 1 сравнений, что даёт сумму ~n²/2, то есть O(n²).

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {          // n-1 проходов
        bool swapped = false;
        for (int j = 0; j < n - i - 1; j++) {  // количество сравнений уменьшается
            if (arr[j] > arr[j + 1]) {
                swap(&arr[j], &arr[j + 1]);
                swapped = true;
            }
        }
        if (!swapped) break;  // если за проход не было обменов, массив отсортирован
    }
}

С оптимизацией (флаг swapped) в лучшем случае выполняется один проход за O(n). Без неё лучший случай — тоже O(n²), потому что внешний цикл всё равно сделает n-1 итераций.

На практике пузырьковую сортировку редко используют из-за низкой эффективности. Однако она полезна для обучения: наглядно показывает работу вложенных циклов и понятие устойчивости (она стабильна — равные элементы не меняют порядок).

Ключевые тезисы

  • Худший и средний случай: O(n²) — из-за двух вложенных циклов по n итераций.
  • Лучший случай (с оптимизацией): O(n) — один проход, если массив уже отсортирован.
  • Пространственная сложность: O(1) — сортировка in-place, не требует дополнительной памяти.
  • Стабильный алгоритм (порядок равных элементов сохраняется).
  • Оптимизация с флагом swapped позволяет досрочно завершить алгоритм, если массив уже отсортирован.

Что спросят дальше

  • — Как изменится временная сложность, если массив почти отсортирован, но не полностью?
  • — Чем пузырьковая сортировка отличается от сортировки вставками по производительности на случайных данных?
  • — Какая временная сложность будет в лучшем случае, если убрать флаг swapped из кода?

Готовьтесь к собеседованию с ENIGMA AI

AI-суфлёр подсказывает ответы прямо на собеседовании в реальном времени — незаметно для интервьюера.

Скачать приложение