码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--排序(上)--归并排序

时间:2015-08-31 16:46:54      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

归并排序

  核心:两个有序子列的归并

和两个多项式相加类似

 所谓指针,他的本职就是存位置。

这里的指针可以是整数,存的是下标

技术分享

技术分享

L最后都不知道在哪了。聪明一点嘛,不要从左往右倒,从右往左倒嘛

归并算法有两种不一样的策略。分而治之,递归的去考虑问题,

分而治之+归并算法。

递归算法

技术分享

没有平均时间复杂度,没有最坏时间复杂度,是一个稳定的算法,

我们排序算法的时候,我们这个不符合同意的函数接口。我们定义一个函数接口来调用这个函数

 

技术分享

那为什么我们要在最外层还声明TmpA呢,我们要看这是怎么用的。

我们用上面的算法在最外层定义Tmp, malloc 和free只执行一次。然而下面的malloc 和free执行了多次。

技术分享

非递归算法

  归并排序非递归的算法

技术分享

 

实际上我们不需要每次都开一次临时数组,我们可以在A和tmp来回导。

  技术分享

 

技术分享

做两步Merge_Pass(),我们确保了最后导出的是是A而不是Tmp

归并排序

优点:平均时间复杂度 Nlogn 最坏时间复杂度 也是NlogN,

缺点:要额外申请一块同大小的数组内存空间,内排序(就是我们所有的操作都可以在内存里面完成)基本不用,在外排序非常有用。

 

数据结构--排序(上)--归并排序

标签:

原文地址:http://www.cnblogs.com/zrui513/p/4773074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!