分割統治マージソートに基づい逆数(パイソン)を探し

 

 

1  先看看合并排序
2  DEF マージ(A、B):
 3      レナ、LENB = LEN(A)、lenの(B)
 4      I、J = 0,0
 5      C = []
 6      ながら(I <レナ J < LENB):
 7          もし A [i]が< B [J]:
 8              C.append(A [i])と
 9              I + = 1
 10          11              C.append(B [J])
 12              J + = 1
 13      もし I < レナ:
 14          C = C + A [I:]
 15      もしJ < LENB:
 16          C = C + B [J:]
 。17      リターンC
 18である             
。19      
20である DEFのmerge_sort(L):
 21である     IF。LEN(L)== 1 22であり、         リターンL
 23は、     24          A = merge_sort(L [0: LEN(L)// 2 ])
 25          B = merge_sort(L [lenは(L)// 2 :])
 26であり、         リターンマージ(A、B)
 27  
28  以下は、逆シーク
29  
30  DEFのmerge_countを(A、B) :
 31である     マージいくつかの同時逆
32      レナは、LENB =LEN(A)、lenの(B)
 33      I、J、RC = 0,0,0
 34      C = []
 35      ながら(I <レナ及び J < LENB):
 36          であれば A [i]が> B [J]:
 37              C.append(B [J])
 38              J + = 1
 39              はrC + = lenA- I
 40          41              C.append(A [i])と
 42              I + = 1
 43      であれば I < レナ:
 44          C = C + A [I :]
 45      なら J < LENB:
 46          C = C +B [J:]
 47      リターン(RC、C)
 48      
49  
50  DEF sort_count(L):
 51      場合でlen(L)== 1 52          リターン(0、L)
 53      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          リターン( RA + rBの+ はrC、C)
 58  
59 L = [4,7,1,2,9,3 、0]
 60  プリント(sort_count(L))
 61  出力:(13、[0、1、2、3、4、7、9])

 

おすすめ

転載: www.cnblogs.com/chong-blog/p/11879677.html