归并排序 mergeSort

225 阅读1分钟

# 归并排序 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)