归并排序分两步:
第一步:将数组递归分为两部分。
第二步:将两部分数组递归合并为一个数组。
def mergeSort(l1):
print('mergeSort:',l1)
length = len(l1)
if length == 1:
return l1
mid = int(length / 2)
l = []
merge(mergeSort(l1[0:mid]), mergeSort(l1[mid:length]), l)
return l
def merge(l1, l2, l):
print('merge:',l, l1, l2)
if l2 == None or l2 == []:
for i in l1:
l.append(i)
return
if l1 == None or l1 == []:
for i in l2:
l.append(i)
return
#将两部分数组的第一个元素进行比较
#选出较小的值最为排好序数组的头元素
#再将剩下的两个数组与该头元素链接起来
if l2[0] < l1[0]:
l.append(l2[0])
merge(l1, l2[1:], l)
else:
l.append(l1[0])
merge(l1[1:], l2, l)