堆排序+代码实现
来源:互联网 发布:淘宝女款大衣 编辑:程序博客网 时间:2024/05/16 13:39
堆排序
堆,heap,是二叉树的一种。小根堆有这样的性质——任意一个结点的值比它的左右孩子都要小。
排序思想
将待排元素看作是完全二叉树,物理上用一维数组存储。
实现堆排序需要解决两个问题:
1.如何将杂乱的完全二叉树初始化为一个堆?
答:从最后一个非叶结点起,将该节点当做根,自上而下进行调整,使之成为一个堆。然后依次对倒数第二个、倒数第三个、直至正数第一个结点进行此操作。
2.输出堆顶元素后,如何将余下的元素调整为一个堆?
答:将最后一个结点放在原根结点位置上,以它为根进行上述的调整。
复杂度分析。
二叉树的层数计算方法,从上往下,1,2,3,4......
耗时的操作有构造初始堆和调整堆两部分。
对深度为h的堆进行自上而下的调整,最多比较次数为2*(h-1)。
在初始化堆的过程中,完全二叉树的高度为h,总的比较次数为
综上,堆排序在复杂度最坏的情况下为O((1)式+(2)式)=O(n*logn)。
代码
初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:(A)
A.8 3 2 5 1 6 4 7 B.3 2 8 5 1 4 6 7 C.3 8 2 5 1 6 7 4 D.8 2 3 5 1 4 7 6
5 0
- 堆排序+代码实现
- 堆排序代码实现
- 堆排序代码实现
- 堆排序算法代码实现
- 堆排序java代码实现
- 堆排序算法的C++实现代码
- python 实现堆排序算法代码
- 堆排序的C++代码实现
- 堆排序原理及代码实现
- 堆排序的数组实现代码
- HeapSort 堆排序 基于伪代码实现
- 堆排序的c++实现代码
- 堆排序的代码实现与思考
- 堆排序的Java代码实现
- 堆排序算法分析 和代码实现
- 堆排序原理及代码实现
- heapsort(堆排序)的代码实现
- 选择排序、树形排序、堆排序的java代码实现
- 数据库备份的问题
- 重装系统后ado和msjro多处报错
- mysql存储过程和函数示例
- Android开发系列(五):Android应用中文件的保存与读取
- 完全分布式Hadoop2.3安装与配置
- 堆排序+代码实现
- 数据库中的一些概念
- 2647. Printer Queue
- C/C++内存对齐
- 程序员的自我修养总结(一)
- codeforces 464C Substitutes in Number
- 2014-9-8 中秋节发福利了
- JSONP跨域获取JSON数据
- 如何配置eclipse中拼写自动联想功能