分治法-归并排序

 1 #分治法-并归排序
 2 
 3 def merge(A,p,q,r):
 4     #排序A中【p,q】,和【q+1,r】
 5     n1=q-p+1
 6     n2=r-q
 7     L=[]
 8     R=[]
 9     for i in range(n1):
10         L.append(A[p+i])
11     for j in range(n2):
12         R.append(A[q+1+j])
13     L.append(float('inf'))
14     R.append(float('inf'))
15     i=0
16     j=0
17     for k in range(p,r+1):
18         if L[i]<=R[j]:
19             A[k]=L[i]
20             i=i+1
21         else:
22             A[k]=R[j]
23             j=j+1
24 
25 import math
26 def merge_sort(A,p,r):
27     #排序A【p,r】
28     if p < r:
29         q = math.floor((p+r)/2)#取整
30         merge_sort(A,p,q)
31         merge_sort(A,q+1,r)
32         merge(A,p,q,r)
33 
34 A=[5,2,4,7,1,3,2,6]
35 
36 merge_sort(A,0,len(A)-1)
37 
38 print(A)
39 ------------------------------------------------
40 [1, 2, 2, 3, 4, 5, 6, 7]
归并排序

猜你喜欢

转载自www.cnblogs.com/yu-liang/p/9163558.html