In [10]:
f = open("IntegerArray.txt", "r")
source = [int(line) for line in f]
f.close()
In [8]:
class Solution:
def countInversions(self, arr):
return self.doSort(arr, 0, len(arr)-1)
def doSort(self, arr, p, q):
if p == q:
return 0
k = (p+q)//2
return self.doSort(arr, p, k) + self.doSort(arr, k+1, q) + self.doMerge(arr, p, k, q)
def doMerge(self, arr, p, k, q):
counter = 0
n = q-p+1
x = n*[None]
s = p
t = k+1
for i in xrange(n):
if s > k:
x[i] = arr[t]
t += 1
elif t > q:
x[i] = arr[s]
s += 1
else:
if arr[s] <= arr[t]:
x[i] = arr[s]
s += 1
else:
x[i] = arr[t]
counter += k-s+1
t += 1
for i in xrange(n):
arr[p] = x[i]
p += 1
return counter
In [9]:
print Solution().countInversions(source)
In [ ]: