Я пытаюсь написать свою собственную функцию разделения hoare, чтобы лучше понять ее. Я думал, что я хорошо слежу за его определением и псевдокодом, но, несмотря на то, что он работает так, как ожидалось, во многих случаях, он разваливается и переходит в бесконечный цикл, когда передается список с несколькими значениями, равными pivot. Где моя ошибка, как мне изменить это, чтобы исправить ошибку?Раздел Hoare не работает, когда более одного значения равно pivot
def partition(lst, left_index, right_index):
pivot = lst[right_index]
while True:
#Increment left index until value at that index is greater or equal to pivot
while True:
if lst[left_index] >= pivot: break
left_index += 1
#Increment right index until value at that index is less or equal to pivot
while True:
if lst[right_index] <= pivot: break
right_index -= 1
if left_index < right_index:
lst[left_index], lst[right_index] = lst[right_index], lst[left_index]
else:
return right_index
return partition(0, end)
Хммм ... Даже если после удаления знака равенства он больше не входит в бесконечный цикл он еще не разбивает список правильно ... даже кажется, что случаи, которые хорошо работали ранее, больше не имеют отношения к этому изменению: D Uchhh, не могли бы вы дать моему коду более глубокий вид, поскольку из этого я думаю, что я, возможно, допустил некоторые ошибки в самых основах реализации algo ... Спасибо ^^ – MadRabbit