我已經在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次總比較。你確定你應該計算掉期嗎? –