归并排序

浪子不回头ぞ 提交于 2019-11-27 13:16:46

def MergeSort(array):
    arrayLen = len(array)
    # 先判断边界条件
    if arrayLen<1:
        return []
    if arrayLen == 1:
        return array
    #做map操作,也就是divide
    index = arrayLen//2
    arrayleft = MergeSort(array[:index])
    arrayright = MergeSort(array[index:])
    retarray = MergeCore(arrayleft,arrayright)
    return retarray

def MergeCore(arrayleft,arrayright):
    # 先判断边界条件
    if len(arrayleft)==0:
        return arrayright
    if len(arrayright)==0:
        return arrayleft
    # 定义2个指针,分别指向两个有序数组的第一个元素
    i,j = 0,0
    retarray = []
    while i < len(arrayleft) and j < len(arrayright):
            if arrayleft[i]<arrayright[j]:
                retarray.append(arrayleft[i])
                i += 1
            else:
                retarray.append(arrayright[j])
                j += 1
    # 将剩余的数组全部放入返回的list中
    retarray.extend(arrayleft[i:])
    retarray.extend(arrayright[j:])
    return retarray

if __name__ == "__main__":
    array = [14,33,27,10,35,19,42,44]
    print(MergeSort(array))

  

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!