我已经在python中实现快速排序算法,但是当我计算完成排序数组的交换次数它不能正确计算。我确信我正在犯一些非常愚蠢的错误,但我无法找到它。任何人都可以在这方面帮助我吗?这是我所做的代码。这应该是在python快速排序算法实现一些小错误
def partition(iArray, l, r):
count = 0
counta = 0
countb = 0
if len(iArray[l:r]) >= 1:
#print "\nInput Array : ",iArray
pivot = iArray[l]
#print "pivot:",pivot
j = l+1
i = l+1
while j <= r and j<len(iArray):
if iArray[j] < pivot:
(iArray[j],iArray[i]) = (iArray[i],iArray[j])
i += 1
j += 1
#print "iArray : \t",iArray
(iArray[l],iArray[i-1]) = (iArray[i-1],iArray[l])
#print "sorted array : ",iArray, " i:",i," j:",j," l:",l
count += iArray.index(pivot)
counta = partition(iArray,l,i-1)
countb = partition(iArray,i,j-1)
sum = count+counta+countb
return sum
#-------------------------------------
A = [56, 276, 68, 159, 68, 89, 245, 14, 45, 126, 78, 19, 15]
l = 0 # Choosing pivot - as first element
r = len(A)
m = partition(A,l,r-1)
print A[:]
print m
此代码打印的互换m个为77,而对于定数组中的正确答案是32。
你是什么意思“交换的正确数量”?你的数组是否被排序? –
@JohnCarpenter:是的数组得到排序,但是当我计算交换次数时,它计算错误。 –
当总是选择左侧数据透视表时,我在该数组上进行了32次总比较。你确定你应该计算掉期吗? –