Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- def mergecount(b,c):
- N = len(b) + len(c)
- ret = [0]*N
- bi = 0
- cj = 0
- num_inv = 0
- for k in range(0,N):
- if bi == len(b):
- assert cj < len(c)
- ret[k] = c[cj]
- cj+=1
- elif cj == len(c):
- assert bi < len(b)
- ret[k] = b[bi]
- bi += 1
- elif b[bi] < c[cj]:
- ret[k] = b[bi]
- bi +=1
- else:
- ret[k] = c[cj]
- cj+=1
- num_inv += len(b)- bi
- b = c = None
- #print 'num_inv:', num_inv, ret
- return num_inv, ret
- def sortcount(arr):
- N = len(arr)
- #print N, arr
- if N==1:
- return 0, arr
- else:
- na, a = sortcount(arr[:N/2])
- nb, b = sortcount(arr[N/2:])
- nc, c = mergecount(a,b)
- return na+nb+nc, c
- def main(argv):
- fp = open(argv[1],'rt')
- arr = []
- for L in fp:
- arr.append(int(L))
- begin = 0
- end = 10 # len(arr)
- num_inv, arr = sortcount(arr)
- print num_inv, len(arr)
- if __name__ == '__main__':
- main(sys.argv)
Advertisement
Add Comment
Please, Sign In to add comment