# 归并排序 mergeSort
#!/usr/bin/env python2.7
# -*- conding: utf-8 -*-
# @Time : 2020/10/30 15:00
# @Author : ada
# @file : mergeSort.py
# @Project: python-script
def mergeSort(alist):
print("Splitting ",alist)
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
print "left",lefthalf
print "right",righthalf
mergeSort(lefthalf)
mergeSort(righthalf)
'''
只有alist > 1 才会进入分割逻辑,才有lefthand和righthand
也就是当最后只有一个元素时递归调用megerSort,打印元素后,递归栈里返回最后一个函数结构后再进入
while 比较运算和归并逻辑
'''
i=0
j=0
k=0
while i < len(lefthalf) and j < len(righthalf):
print 'en merge'
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
print("Merging ",alist)
alist = [54,28]
mergeSort(alist)
print(alist)