归并算法Python3.7实现及时间复杂度分析

归并排序采用分而治之的策略,由冯诺依曼提出,是一种稳定的排序算法。它将序列不断分解直至只剩单一元素,再有序归并。算法流程包括序列分解、子序列归并,最终形成有序序列。Python3.7的代码实现展示了这一过程。通过对递归形式的分析,得出时间复杂度为O(nlogn)。
摘要由CSDN通过智能技术生成

归并排序是由冯诺依曼首次提出,该算法采取的是分而治之(Divide and Conquer)的思想,速度仅次于快速排序且为稳定算法,适合的排序情况为总体无序,而各子集相对有序。

原理:其思想就是分而治之,具体来讲就是把原序列不断分解为子序列,直到子序列只有一个元素为止,然后再将各个子序列进行有序归并直到序列数为一。

从上图就可以看出归并算法的流程:

  1. 将原始序列分为2个子序列
  2. 再将2个子序列分成4个子序列
  3. 直到每个子序列中只有1个元素
  4. 然后进行归并操作,并排序,不断重复直到只有一个序列为止

代码实现

#递归实现
def merge(left,right,s): #传入左序列和右序列还有原序列
    i = j = 0
    while i + j < len(s): #原序列的作用为控制循环次数
        if (j == len(right)) or (i < len(left) and left[i] < right[j]): #如果右边的序列走完了或左边的序列[i]的值小于右边序列[j]的值 则将左边[i]的值保存到s序列
            s[i+j] = left[i]
            i += 1
        else: #不然将右边序列[j]的值保存到s序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值