题目
例如,2,4,1,3,5有三个逆序对(2,1)(4,1)(4,3)
思路
用归并排序的思想如果我左边的比右边大,那么我左边之后的全都比右边大,都是逆序对
def inv_merge(list):
if len(list) <= 1:
return list,0
mid = len(list)//2
left,lnum = inv_merge(list[:mid])
right,rnum = inv_merge(list[mid:])
result,anum = merge(left,right)
anum += (lnum+rnum)
return result,anum
def merge(left,right):
c = []
i,j = 0 ,0
num = 0
while i<=len(left)-1 and j<=len(right)-1:
if left[i] < right[j]:
c.append(left[i])
i += 1
elif left[i] > right[j]:
c.append(right[j])
j += 1
num += (len(left)-i)
if i<len(left):
c += left[i:]
if j<len(right):
c += right[j:]
return c,num