<pre name="code" class="python">def inversion(A,p,r):
#inversion return inversion num and sort the arr
if(r-p<=1):
return 0
else:
q=(p+r)//2
n1,n2=inversion(A,p,q),inversion(A,q,r)
n3=0
L=A[p:q];R=A[q:r]
infinity=100000
L.append(infinity);R.append(infinity)
i,j=0,0
for k in range(p,r):
if L[i]<=R[j]:
A[k]=L[i]
i+=1;k+=1
n3+=j
else:
A[k]=R[j]
j+=1;k+=1
return n1+n2+n3
A=[2,3,8,6,1]
print(inversion(A,0,len(A)))
print(A)
逆序对的nlgn算法
最新推荐文章于 2021-12-13 18:32:51 发布