class Merge_reversepair():
def __init__(self, arr, left, right):
self.count = 0
self.arr = arr
self.left = left
self.right = right
def merge(self, arr, left, right):
mid = int((left+right)/2)
aux = [0]*(right-left+1)
for i in range(left,right+1):
aux[i-left] = arr[i]
i = left
j = mid+1
for k in range(left, right+1):
if i > mid:
arr[k] = aux[j-left]
j += 1
elif j > right:
arr[k] = aux[i-left]
i += 1
elif aux[i-left] <= aux[j-left]:
arr[k] = aux[i-left]
i += 1
elif aux[i-left] > aux[j-left]:
self.count += mid-i+1
arr[k] = aux[j-left]
j += 1
def merge_sort(self, arr, left, right):
if left >= right:
return
mid = int((left+right)/2)
self.merge_sort(arr, left, mid)
self.merge_sort(arr, mid+1, right)
self.merge(arr, left, right)
return self.count, arr
if __name__ == '__main__':
n = 5
arr = [6,3,4,2,6]
count = 0
m = Merge_reversepair(arr, 0, n-1)
res2 = m.merge_sort(arr, 0, n-1)
print(res2)
欢迎批评指正~