归并排序时间复杂度分析
归并排序时间复杂度分析
- 归并排序
- 工作原理
- 时间复杂度计算
归并排序
归并排序也叫(Merge sort)。
工作原理
- 将给定的数组一份为二
- 对两部分数组再使用归并排序使其有序
- 最后再将两部分数组合并
时间复杂度计算
1、首先可知
f(n)=2f(n2)+nf(n)=2f(\frac{n}{2})+n \space\space\space\space\space\space\space\space\space f(n)=2f(2n)+n
其中:f(n)表示对n个数进行归并排序f(n)表示对n个数进行归并排序f(n)表示对n个数进行归并排序 2f(n2)表示将n个数分成两部分分别进行归并排序2f(\frac{n}{2})表示将n个数分成两部分分别进行归并排序2f(2n)表示将n个数分成两部分分别进行归并排序 n表示对两个子过程结束之后合并的过程n表示对两个子过程结束之后合并的过程n表示对两个子过程结束之后合并的过程
2、推导
f(n2)=2f(n4)+n2当n=n2时f(\frac{n}{2})=2f(\frac{n}{4})+\frac{n}{2} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{2}时f(2n)=2f(4n)+2n 当n=2n时
f(n4)=2f(n8)+n4当n=n4时f(\frac{n}{4})=2f(\frac{n}{8})+\frac{n}{4} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{4}时f(4n)=2f(8n)+4n 当n=4n时
………… \space\space\space\space\space\space\space\space\space ……
f(n2m−1)=2f(n2m)+n2m−1当n=n2m−1时f(\frac{n}{2^{m-1}})=2f(\frac{n}{2^m})+\frac{n}{2^{m-1}} \space\space\space\space\space\space\space\space\space 当n=\frac{n}{2^{m-1}}时f(2m−1n)=2f(2mn)+2m−1n 当n=2m−1n时
3、由此可得:
f(n)=2f(n2)+nf(n)=2f(\frac{n}{2})+nf(n)=2f(2n)+n
=2×(2f(n4)+n2)+n= 2\times\bigg(2f(\frac{n}{4})+\frac{n}{2}\bigg)+n=2×(2f(4n)+2n)+n
=22f(n22)+2n=2^2f(\frac{n}{2^2})+2n=22f(22n)+2n
=22×(2f(n8)+n4)+2n=2^2\times\bigg(2f(\frac{n}{8})+\frac{n}{4}\bigg)+2n=22×(2f(8n)+4n)+2n
=23f(n23)+3n=2^3f(\frac{n}{2^3})+3n=23f(23n)+3n
………………
=2mf(n2m)+mn=2^mf(\frac{n}{2^m})+mn=2mf(2mn)+mn
当 m 足够大时(仅剩一个数字时),可使得n2m=1\frac{n}{2^m}=12mn=1
求出 m=log2nm=log_2nm=log2n
代入f(n)=2mf(n2m)+mn中可得代入 \space\space f(n)=2^mf(\frac{n}{2^m})+mn \space\space 中可得代入 f(n)=2mf(2mn)+mn 中可得
f(n)=2(log2n)f(1)+n⋅log2nf(n)=2^{(log_2n)}f(1)+n\cdot log_2n f(n)=2(log2n)f(1)+n⋅log2n
其中f(1)=0其中\space\space f(1)=0其中 f(1)=0
所以最终f(n)=n⋅log2n所以最终\space\space f(n)=n\cdot log_2n所以最终 f(n)=n⋅log2n
归并排序时间复杂度分析相关推荐
- 快速排序归并排序—时间复杂度分析
引言: 大家好,我是小星星,今天要梳理的知识点是--快速排序和归并排序时间复杂度分析. 目录 一.快排时间复杂度分析 二.归并排序时间复杂度分析 三.写在最后 一.快排时间复杂度分析 快速排序的时间复 ...
- 关于快速排序和归并排序的时间复杂度分析
目录 一.快排时间复杂度分析 二.归并排序时间复杂度分析 三.写在最后 一.快排时间复杂度分析 快速排序的时间复杂度在O(nlogn)~ O(n^2)之间,下面我分别分析这两种情况: (一)快速排序的 ...
- 归并排序执行次数_归并排序过程、时间复杂度分析及改进
前言 上一篇文章,介绍过第一种基于分治策略的排序算法--快速排序.接下来我们来讨论另一种基于分治策略的排序算法,归并排序.归并排序也被认为是一种时间复杂度最优的算法,我们还是按照基本过程,代码,最坏时 ...
- 二路归并排序及时间复杂度分析
序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...
- 算法时间复杂度分析专题一(帮助快速解题)
笔试: 题目告诉数据范围,根据题目的数据范围来考虑用什么解法 c++竞赛:一般时限1~2秒 时间范围内指令操作次数<10^8 不同数据范围下,代码时间复杂度和算法该如何选择: n<=30, ...
- 【排序算法时间复杂度分析】递推式
关于包含递归调用的时间复杂度分析-以归并排序为例子 T(n) = 2*T(n/2)+O(n) T(n/2) 代表一次递归 O(n)代表合并 T(1) = T(1) T(n)/n = T(n/2)/(n ...
- python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图
python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...
- 递归算法时间复杂度分析
递归算法时间复杂度分析 时间复杂度: 一般情况下,算法中基本操作重复的次数就是问题规模n的某个函数f(n),进而分析f(n)随n的变化情况并确 ...
- 时间复杂度分析-大O表示法
开篇词 | 从今天起,跨过"数据结构与算法"这道坎 你好,我是王争,毕业于西安交通大学计算机专业.现在回想起来,本科毕业的时候,我的编程水平其实是很差的.直到读研究生的时候,一个师 ...
- 归并排序时间复杂度----主定理
http://blog.csdn.net/touch_2011/article/details/6785881 1.序言 这是<漫谈经典排序算法系列>第四篇,解析了归并排序. 各种排序算法 ...
最新文章
- 【学术相关】科技论文写作:grammerly润色工具
- 分布式服务下,消息中间件改造
- Scala模拟Spark分布式计算流程示例代码
- Anaconda2安装时出现问题
- ajax简单的验证,ajax初探--实现简单实时验证(示例代码)
- SKlearn参数详解—随机森林
- Wing IDE 4.1破解教程
- vue获取tr内td里面所有内容_vue 项目学习
- 遇到一个Linux系统文件被删除后仍占用磁盘的问题
- springboot启动报错:Error starting ApplicationContext. To display the conditions report re-run your appl
- 设计即开发,如何打通软件研发的“任督二脉”?
- Atitit 项目常用模块 非业务模块 通用技术模块 attilax大总结 理论上可行。但要限制接口方式。 不然现在很多ui与后端接口模式很多,导致组合爆炸。。。 常用模块也就100来个而已。。
- 按键消抖的原理与解决方案浅论
- HTML5_2(视频)
- 网工必须要了解BGP外部网关路由选择协议
- session的钝化和session的活化(序列化和反序列化)
- android webview 劫持,微信webview 及第三方浏览器劫持视频问题
- 微信公众平台开发学习
- 简单的图书馆借/还系统——C++实现
- 售前和产品经理有何区别?