堆排序 - 数据结构和算法92
2014-02-22 21:05
232 查看
堆排序
让编程改变世界Change the world by program
堆排序
上节课我们介绍的希尔排序是对直接插入排序的改进,而我们这节课谈的堆排序是对选择排序进行改进的排序算法,堆排序算法的时间复杂度和希尔排序是一样的,都是O(nlogn)。堆排序的话呢,涉及到的数据结构是完全二叉树,或者说完全二叉树正是因为有堆排序这样的高效算法而显得重要!我们来回顾下:
[caption id="attachment_3227" align="aligncenter" width="600"]
小顶堆[/caption]
[caption id="attachment_3228" align="aligncenter" width="600"]
大顶堆[/caption]
如图,堆是具有下列性质的完全二叉树:每个结点的值都大于或者等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或者等于其左右孩子结点的值,称为小顶堆。
那么从概念我们可以知道,根结点一定是堆中所有结点最大或者最小者,如果按照层序遍历的方式给结点从1开始编号,则结点之间满足如下关系:
下标i与2i和2i+1是双亲和子女关系。
那么如果把大顶堆和小顶堆用层序遍历存入数组,则一定满足上面的表达式。
我们用刚才的图举例说明:
...... 省略,具体请看视频讲解 ......
堆排序算法
堆排序(Heap Sort)就是利用堆进行排序的算法,它的基本思想是:将待排序的序列构造成一个大顶堆(或小顶堆)。
此时,整个序列的最大值就是堆顶的根结点。将它移走(就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值)。
然后将剩余的n-1个序列重新构造成一个堆,这样就会得到n个元素中的此大值。
如此反复执行,便能得到一个有序序列了。
...... 省略,具体请看视频讲解 ......
[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUAwL8GQB2fghTb9c']视频下载[/Downlink]
[Downlink href='http://urlxf.qq.com/?3uqEfyY']备胎下载[/Downlink]
相关文章推荐
- 一步步学习数据结构和算法之堆排序效率分析及java实现
- 算法设计和数据结构学习堆排序
- 数据结构&算法实践—【排序|选择排序】堆排序
- 算法和数据结构---排序---堆排序
- 浅谈算法和数据结构: 五 优先级队列与堆排序
- 数据结构与算法之堆与堆排序
- 【数据结构&&算法系列】堆排序简单介绍及其实现
- 算法与数据结构——算法题 92:大数据查重(腾讯笔试题) ? 待解决
- 【算法与数据结构】图说堆排序
- Python天天美味(32) - python数据结构与算法之堆排序
- 【算法与数据结构】冒泡、插入、归并、堆排序、快速排序的Java实现代码
- 经典算法和数据结构(一) 优先级队列与堆排序
- 数据结构与算法学习笔记——堆排序
- 数据结构和算法分析之排序算法--选择排序(堆排序)
- 浅谈算法和数据结构: 五 优先级队列与堆排序
- 一步一步复习数据结构和算法基础-堆排序
- 算法与数据结构之堆排序
- 数据结构:排序算法之堆排序和选择排序
- 堆排序的代码实现 - 数据结构和算法93
- 【算法与数据结构专场】堆排序是什么鬼?