Работал над проблемой разбиения Hoare и понял, что разделение Hoare, похоже, не в состоянии правильно сортировать элементы в случае, когда левый и правый указатели одновременно сталкиваются со значением, равным центральной точке.
Например, для массива [0,2,1,0,2,1,2,0]
, если вы выбрали 1 в качестве точки поворота, левый и правый указатели встретятся с двумя единицами в одно и то же время, поменяйте местами их, а затем продолжите, выдав неправильный вывод [0,0,1,0,2,1,2,2]
Известно ли, что это проблема с разделением Hoare? Как люди обычно имеют дело с этим делом?
Для справки, это код, который я использую:
def hoarePartition(nums):
left, right = -1, len(nums)
while True:
left += 1
while nums[left] == 0:
left += 1
right -= 1
while nums[right] == 2:
right -= 1
if left >= right:
return
nums[left], nums[right] = nums[right], nums[left]