Mediumquicksort
Как работает QuickSort?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
QuickSort — divide and conquer, in-place, average O(n log n), worst O(n²). Выбираем pivot, partition (меньше слева, больше справа), рекурсивно сортируем части.
def quicksort(arr, lo, hi):
if lo < hi:
p = partition(arr, lo, hi)
quicksort(arr, lo, p - 1)
quicksort(arr, p + 1, hi)
def partition(arr, lo, hi):
pivot = arr[hi]
i = lo - 1
for j in range(lo, hi):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[hi] = arr[hi], arr[i + 1]
return i + 1Выбор pivot критичен: последний элемент → worst case O(n²) на отсортированном; random pivot → expected O(n log n); median of medians → guaranteed O(n). Не stable, но cache-friendly, быстрее merge sort на практике. Introsort (C++ std::sort) — гибрид quicksort + heapsort для защиты от worst case.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.