算法分析与设计 二分归并排序

算法分析与设计

二分归并排序

问题描述:

对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k。

算法思路:

每次用分治的思想将数组进行二分操作,然后从下往上开始进行合并排序。
在这里插入图片描述

核心代码:

if p<r
then q<-(p+r)/2
	mergesort(a,p,q)
	mergesort(a,q+1,r)
	merge(a,p,q,r)





时间复杂度:

在这里插入图片描述
设n=2k
W(n)=2W(n/2)+n-1=2[2W(n/4)+n/2-1]+n-1=22W(n/4)+2n-1-2
=22[2W(n/8)+n/4-1]+2n-1-2=23W(n/8)+3n-1-2-4=…
=2kW(1)+kn-(1+2+4+…+2k-1)=2kW(1)+kn-(2k-1)
=2kW(1)+kn-2k-1
把W(1)=0和k=logn代入上式得W(n)=nlogn-n+1=O(nlogn)
所以归并排序算法得时间复杂度为O(nlogn)。

源码:

https://github.com/SpiritDemon-max/myText/blob/master/mergeSort.cpp

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值