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])