-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinversions.py
More file actions
37 lines (31 loc) · 783 Bytes
/
inversions.py
File metadata and controls
37 lines (31 loc) · 783 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
# coding=utf-8
def merge(items, p, q, r):
L = items[p:q+1]
R = items[q+1:r+1]
i = j = 0
k = p
inversions = 0
while i < len(L) and j < len(R):
if(L[i] < R[j]):
items[k] = L[i]
i += 1
else:
items[k] = R[j]
j += 1
inversions += (len(L) - i)
k += 1
if(j == len(R)):
items[k:r+1] = L[i:]
return inversions
def mergesort(items, p, r):
inversions = 0
if(p < r):
q = (p+r)/2
inversions += mergesort(items, p, q)
inversions += mergesort(items, q+1, r)
inversions += merge(items, p, q, r)
return inversions
items = [4,3,2,1,17]
inversions = mergesort(items, 0, len(items)-1)
print items,inversions