クイックソートのインプレース パーティション サブルーチンを実装しようとしていました。一意の要素の配列で動作しますが、配列に重複要素が含まれていると失敗します
コードは次のようになります
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]
これは私の実装に問題があるためですか?誰かが少し助けてくれますか?