Назад к вопросам
Junior
61
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В худшем и среднем случаях $O(n^2)$, где $n$ — количество элементов в списке. В лучшем случае (когда список уже отсортирован) — $O(n)$.

# Функция пузырьковой сортировки
def bubble_sort(arr):
    n = len(arr)
    # Проходим по всем элементам массива
    for i in range(n):
        # Флаг для оптимизации: если за проход не было обменов, массив отсортирован
        swapped = False
        # Последние i элементов уже на своих местах
        for j in range(0, n-i-1):
            # Если текущий элемент больше следующего, меняем их местами
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        # Если за проход не было обменов, выходим
        if not swapped:
            break
    return arr

# Примеры использования
# Худший случай (обратно отсортированный список)
arr_worst = [5, 4, 3, 2, 1]
bubble_sort(arr_worst) # Производится n*(n-1)/2 сравнений и обменов

# Средний случай (случайный список)
arr_average = [3, 1, 4, 1, 5, 9, 2, 6]
bubble_sort(arr_average) # В среднем случае количество сравнений и обменов также пропорционально n^2

# Лучший случай (отсортированный список)
arr_best = [1, 2, 3, 4, 5]
bubble_sort(arr_best) # Благодаря оптимизации, выполняется только один проход по списку, n сравнений
Сценарий Временная сложность
Худший случай $O(n^2)$
Средний случай $O(n^2)$
Лучший случай $O(n)$