![]()
1 #先看看合并排序
2 def merge(A,B):
3 lenA,lenB=len(A),len(B)
4 i,j=0,0
5 C=[]
6 while(i<lenA and j<lenB):
7 if A[i]<B[j]:
8 C.append(A[i])
9 i+=1
10 else:
11 C.append(B[j])
12 j+=1
13 if i<lenA:
14 C=C+A[i:]
15 if j<lenB:
16 C=C+B[j:]
17 return C
18
19
20 def merge_sort(L):
21 if len(L)==1:
22 return L
23 else:
24 A=merge_sort(L[0:len(L)//2])
25 B=merge_sort(L[len(L)//2:])
26 return merge(A,B)
27
28 #以下是求逆序
29
30 def merge_count(A,B):
31 #merge和数逆序同时
32 lenA,lenB=len(A),len(B)
33 i,j,rC=0,0,0
34 C=[]
35 while(i<lenA and j<lenB):
36 if A[i]>B[j]:
37 C.append(B[j])
38 j+=1
39 rC+=lenA-i
40 else:
41 C.append(A[i])
42 i+=1
43 if i<lenA:
44 C=C+A[i:]
45 if j<lenB:
46 C=C+B[j:]
47 return (rC,C)
48
49
50 def sort_count(L):
51 if len(L)==1:
52 return (0,L)
53 else:
54 (rA,A)=sort_count(L[0:len(L)//2])
55 (rB,B)=sort_count(L[len(L)//2:])
56 (rC,C)=merge_count(A,B)
57 return (rA+rB+rC,C)
58
59 L=[4,7,1,2,9,3,0]
60 print(sort_count(L))
61 #output:(13, [0, 1, 2, 3, 4, 7, 9])