#归并排序(递归)的python实现
def merge(li,p,q,r):
n1 = q - p + 1
n2 = r - q
L = []
R = []
for i in range(n1):
L.append(li[p+i])
for j in range(n2):
R.append(li[q+1+j])
i = 0
j = 0
k = p
while i<len(L) and j<len(R):
if L[i]<R[j]:
li[p] = L[i]
p += 1
i += 1
else:
li[p] = R[j]
p += 1
j += 1
if i<len(L):
li[p] = L[i]
i += 1
p += 1
if j<len(R):
li[p] = R[j]
p += 1
j += 1
def MergeSort(li, p, r):
if p < r:
q = int((p+r)/2)
MergeSort(li, p, q)
MergeSort(li, q+1, r)
merge(li, p, q, r)
if __name__ == '__main__':
l = [3,41,52,26,38,57,9,49]
MergeSort(l,0,len(l)-1)
print(l)
第二种
#Python实现归并排序
def Merge(left, right):
li = []
i = 0
j = 0
while i<len(left) and j<len(right):
if left[i] < right[j]:
li.append(left[i])
i += 1
else:
li.append(right[j])
j += 1
if i<len(left):
li = li + left[i:]
if j<len(right):
li = li + right[j:]
return li
def MergeSort(li):
if len(li)<=1:
return li
q = int(len(li)/2)
ll = MergeSort(li[:q])
rr = MergeSort(li[q:])
lll = Merge(ll,rr)
return lll
li = [3,41,52,26,38,57,9,49]
print(MergeSort(li))
print(li)