归并排序主要是分治和递归的思想:
首先用二分法将整个数组分割成很多小块
然后合并每个小块,将较小的元素拍到前面
def merge(a, b):
c = []
i = j = 0
while i < len(a) and j < len(b): #从中线两边归并,比较大小那个小就把那个元素放在tr[k]中
if a[i] < b[j]:
c.append(a[i])
i = i+1
else:
c.append(b[j])
j = j+1
if i < len(a):
for k in a[i:]:
c.append(k)
if j < len(b):
for k in b[j:]:
c.append(k)
return c
def m_sort(a): #S为首坐标,T为尾坐标
if len(a) <= 1:
return a
else:
middle = len(a)/2
left = m_sort(a[:middle])
right = m_sort(a[middle:]) # 分治
return merge(left, right) #递归
a = [50,10,90,30,70,40,80,60,20]
print m_sort(a)