我遇到了a post in SO其中算法是用python代碼實現的。這是在this article中僞代碼的直接實現。使用分而治之發現數列的反轉
然而,在僞代碼中,存在這樣的情況計數是通過殘留在數組元素「a'.In上述Python代碼的數目增加一條線,它被給定爲
count += len(a) - i
不能我們做同樣的
count += len(a[i:])
此外,而不是
c += a[i:] + b[j:]
我寫的,
c.append(a[i:])
c.append(b[j:])
總共我的版本是這樣的
def merge(left,right):
i=0
j=0
count=0
c=[]
while i<len(left) and j<len(right):
c.append(min(left[i],right[j]))
if right[j]< left[i]:
count+=len(left[i:])
j+=1
else:
i+=1
c.append(left[i:])
c.append(right[j:])
return count,c
def dnc(input):
if len(input)==1:
return 0,input
mid=len(input)/2
left=input[:mid]
right=input[mid:]
l,left=dnc(left)
r,right=dnc(right)
m,result=merge(left,right)
count=l+r+m
return count,result
唉!當我計算這個排序的陣列上,我得到的3而不是0
if __name__=='__main__':
input =[1,2,3,4,5]
ct,res=dnc(input)
print ct
我做了什麼錯誤?有人能幫我找出答案嗎?
那麼......哪一個是你的問題? – 2012-03-27 03:34:22