Skip to content

Instantly share code, notes, and snippets.

@lishunan246
Created November 20, 2016 15:28
Show Gist options
  • Save lishunan246/e7c628cac5d72bed3b9fb3553aef4546 to your computer and use it in GitHub Desktop.
Save lishunan246/e7c628cac5d72bed3b9fb3553aef4546 to your computer and use it in GitHub Desktop.
Counting Inversions
f = open("IntegerArray.txt")
a = []
for line in f:
a.append(int(line))
def handle(t1, t2):
a1 = t1
a2 = t2
result = []
cnt = 0
while len(a1) + len(a2) != 0:
if len(a1) == 0:
result.append(a2[0])
a2 = a2[1:]
cnt += len(a1)
elif len(a2) == 0:
result.append(a1[0])
a1 = a1[1:]
elif a1[0] > a2[0]:
result.append(a2[0])
a2 = a2[1:]
cnt += len(a1)
else:
result.append(a1[0])
a1 = a1[1:]
return result, cnt
def count(array):
if len(array) == 1:
return array, 0
first, fc = count(array[:len(array) / 2])
last, lc = count(array[len(array) / 2:])
at, cnt = handle(first, last)
return at, fc + lc + cnt
a, n = count(a)
print n
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment