#方法1:暴力法 0(n**2)
def InversePairs(data):
count=0
for i in range(len(data)):
for j in range(i,len(data)):
if data[i]>data[j]:
count += 1
return count
data=[7,5,6,4]
InversePairs(data)
#方法2:利用归并排序思想0(nlogn)
def InversePairs(data):
import copy
n= len(data)
if not data or n<0:
return 0
datacopy = copy.deepcopy(data)
return InversePairsCore(data,datacopy,0,n-1)
def InversePairsCore(data,datacopy,start,end):
if start == end:
return 0
mid=(start+end)//2
left=InversePairsCore(data,datacopy,start,mid)
right=InversePairsCore(data,datacopy,mid+1,end)
count=0
i=mid
j=end
loccopy=end
while i>=start and j>mid:
if data[i]>data[j]:
count += j-mid
datacopy[loccopy]=data[i]
i -= 1
loccopy -=1
else:
datacopy[loccopy]=data[j]
j -= 1
loccopy -=1
while i>=start:
datacopy[loccopy]=data[i]
i-=1
loccopy-=1
while j>mid:
datacopy[loccopy]=data[j]
j-=1
loccopy-=1
s=start
while s<=end:
data[s]=datacopy[s]
s+=1
return left + right + count
data=[7,5,6,4]
InversePairs(data)