Назад к вопросам
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)$ |