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 ifJ < LENB: 16 C = C + B [J:] . 17 return C 18 is . 19 20 is DEF merge_sort (L): 21 is IF len (L) ==. 1 : 22 is return L 23 is the else : 24 A = merge_sort (L [0: len (L) // 2 ]) 25 B = merge_sort (L [len (L) // 2 :]) 26 is return Merge (A, B) 27 28 # the following is a reverse seek 29 30 DEF merge_count (A, B) : 31 is # Merge several simultaneous reverse 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])