Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析

算法描述分析:

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

这是官方一点的对于归并排序的定义,简单的来说,我们把要排序的列表或者数组,每一次都给它递归生成n/2有序列表

我们拿例子来看:

有这样一个列表我们按照分治思想,先将它分为俩组

 

 按照这个思路,我们继续将列表分下去

Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析_第1张图片

当我们通过递归分到只剩一个元素时,将俩边的元素进行合并成有序的一个列表

Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析_第2张图片

接着其他递归出口也将对应的子列表,合并好

Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析_第3张图片

一层层向上合并

Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析_第4张图片

最后合并成一个列表

复杂度分析:

排序算法时间复杂度的比较图 转载:https://blog.csdn.net/weixin_40596016/article/details/79711682

Pyhton 描述 归并排序算法详解 时间复杂度,空间复杂度分析_第5张图片

python 代码:

# -*- coding: utf-8 -*-
"""
Created on 

@author: Administrator
"""
#优化了网上对于合并的函数的复杂,pyhton的宗旨 
#简洁胜过复杂
#Complex is better than complicated.
#利用列表性质
def merge(leftList,rightList): 
    merges = []
    while leftList and rightList: #谁先出完循环结束
        if leftList[-1] >= rightList[-1]:  #将排序好的俩个列表从后放,谁最大谁放在后面
            merges.insert(0,leftList[-1])
            leftList.pop()
        else :
            merges.insert(0,rightList[-1])
            rightList.pop()
    merges=leftList+rightList+merges  #剩余相加即可,切记剩余的是小数要放在前面
    return merges
def mergesort(a):
    if len(a)<=1:
        return a
    mid = len(a)//2
    rightList=mergesort(a[:mid])
    leftList=mergesort(a[mid:])
    return merge(leftList,rightList)

a=[2,15,30,2,5,9,6]
print (mergesort(a))

 

你可能感兴趣的:(python,算法,python,归并排序,算法,详解)