← Назад к вопросам
Какая асимптотическая сложность дефолтной сортировки в Python?
1.3 Junior🔥 51 комментариев
#Python
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Асимптотическая сложность сортировки в Python
Дефолтная сортировка в Python использует алгоритм Timsort, который был разработан Тимом Петерсом и внедрён в Python 2.3. Это гибридный алгоритм, сочетающий преимущества merge sort и insertion sort.
Асимптотические сложности Timsort
- Лучший случай: O(n) - когда данные уже отсортированы
- Средний случай: O(n log n) - типичная ситуация
- Худший случай: O(n log n) - гарантирует логарифмическую сложность всегда
- Пространственная сложность: O(n) - требуется дополнительная память
Структура Timsort
- Разделение на small runs - массив разбивается на подмассивы (64 элемента)
- Insertion sort - каждый подмассив сортируется insertion sort
- Merge - подмассивы объединяются merge sort алгоритмом
Это сочетание позволяет:
- Insertion sort эффективен на малых данных
- Merge sort гарантирует логарифмическую сложность
- Адаптивность к уже отсортированным данным
Практический код
import time
import random
def measure_sort_time(n):
data = [random.randint(1, 1000000) for _ in range(n)]
start = time.time()
sorted_data = sorted(data)
end = time.time()
return end - start
for n in [1000, 10000, 100000]:
t = measure_sort_time(n)
print(f'n={n}: {t:.6f}s')
Преимущества Timsort
- Быстрый на реальных данных - использует частично отсортированные последовательности
- Стабильный - сохраняет порядок равных элементов
- Адаптивный - замечает существующий порядок
- Предсказуемый - O(n log n) даже в худшем случае
Альтернативы
- Java: Dual-Pivot Quicksort
- C++: introsort
- JavaScript: V8 использует Timsort
Timsort - один из лучших алгоритмов благодаря отличной практической производительности.