Какая временная сложность алгоритма сортировки

«Какая временная сложность алгоритма сортировки» — вопрос из категории Python, который задают на 38% собеседований Продуктовый Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сложность зависит от алгоритма:

  • Bubble Sort, Insertion Sort, Selection Sort: O(n²) в худшем и среднем случае. Простые, но неэффективные для больших массивов.
# Пример Bubble Sort
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
  • Merge Sort, Heap Sort: O(n log n) в худшем и среднем случае. Эффективны для больших данных, но требуют дополнительной памяти (Merge Sort) или сложны в реализации (Heap Sort).

  • Quick Sort: O(n log n) в среднем, но O(n²) в худшем случае (редко, если опорный элемент выбирается плохо). На практике часто быстрее других из-за малых констант.

  • Tim Sort (используется в Python, Java): O(n log n) в худшем случае. Гибрид Merge Sort и Insertion Sort, оптимизирован для реальных данных.

Для почти отсортированных данных Insertion Sort может быть близок к O(n).