Я пытался реализовать подпрограмму разбиения на месте быстрой сортировки. Она работает с массивом уникальных элементов, но завершается неудачно, когда массив содержит повторяющиеся элементы
Код выглядит так
def inplace_partitioning(input,l,r):
len_a=len(input)
pivot=input[l]
i=l+1
for j in range(l+1,r+1,1):
if input[j]<pivot:#do nothing if new elem >pivot
#swap new elem with leftmost elem greater than pivot
temp=input[j]
input[j]=input[i]
input[i]=temp
i+=1
#swap pivot with rightmost elem lessthan pivot
temp=input[l]
input[l]=input[i-1]
input[i-1]=temp
Когда ввод состоит из уникальных элементов, код дает правильные результаты
input=[5,6,3,1,8,4]
inplace_partitioning(input,0,len(input)-1)
print input
>>[4, 3, 1, 5, 8, 6]
когда я попробовал массив ниже, я получил неправильные результаты
input=[5,6,3,1,8,5]
>>>[1, 3, 5, 6, 8, 5]
Это потому, что моя реализация ошибочна? Может кто-нибудь немного помочь?