Задать вопрос
Hazlarorn
@Hazlarorn

Как правильно написать partition?

Вопрос следующий немогу найти нормальный источник где правильно написан код! для функции partition (в том смысле что например этот алгоритм не зависит от того способа каким выбран начальный элемент Pivot) или я чет не понимаю? Или можно другим способом написать in_place сортировку Хоара?
  • Вопрос задан
  • 114 просмотров
Подписаться 1 Средний 11 комментариев
Решения вопроса 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
https://en.m.wikipedia.org/wiki/Quicksort
Смотрите секцию algorithm. Там аж 2 варианта с объяснением и кодом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
veselov4nton
@veselov4nton
Системный администратор.
Классика. Pivot — обычно середина. Возвращает индекс, где массив нужно "порезать".
Не гарантирует, что pivot окажется на своём месте!

def partition(arr, low, high):
pivot = arr[(low + high) // 2]
i = low - 1
j = high + 1

while True:
i += 1
while arr[i] < pivot:
i += 1
j -= 1
while arr[j] > pivot:
j -= 1
if i >= j:
return j
arr[i], arr[j] = arr[j], arr[i]
→ Не зависит от pivot, но работает чётко, если правильно делишь левую/правую часть в рекурсии
(quicksort(arr, low, p) и quicksort(arr, p + 1, high))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы