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

算法描述分析:

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

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

我们拿例子来看:

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

 

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

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

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

一层层向上合并

最后合并成一个列表

复杂度分析:

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

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))

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值