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

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

Вопрос следующий немогу найти нормальный источник где правильно написан код! для функции partition (в том смысле что например этот алгоритм не зависит от того способа каким выбран начальный элемент Pivot) или я чет не понимаю? Или можно другим способом написать in_place сортировку Хоара?
  • Вопрос задан
  • 190 просмотров
Подписаться 1 Средний 13 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Shultais Education
    Алгоритмы и структуры данных
    3 месяца
    Далее
  • Яндекс Практикум
    Подготовка к алгоритмическому собеседованию
    1 неделя
    Далее
Решения вопроса 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))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
https://en.m.wikipedia.org/wiki/Quicksort
Смотрите секцию algorithm. Там аж 2 варианта с объяснением и кодом.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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