/*
* 堆的性质(最小堆为例):
* 0.根节点为最小值
* 1.堆可以看做是一个完全二叉树(即孩子节点从左向右排列)
* 2.堆的高度lgn/lg2(n为节点的数目)
* 3.第i节点的左孩子节点是2*i+1,右孩子节点为2*i+2
* 4.以任意一个节点作为根节点,那么该节点都是堆
* 5.可以用一个数据来表示堆
*/
/*
* 构建堆的原理:
* 上滤
* 在最后一个节点后建立一个空节点...
分类:
编程语言 时间:
2015-04-23 21:47:50
阅读次数:
182
堆排算是排序算法中比较难的一个算法,在实现编码之前首先要对堆排的思想有一个清晰的思路,下面我们就来分析一下堆排序。
1.首先要明白堆排序第一步要有堆,也就是完全二叉树,那么问题来了,如何创建一个完全二叉树呢?完全二叉树是需要按层来创建的,如果你曾经编写过按层遍历二叉树这块会很好理解,按层的话要记录上一个结点,所以要用到 队列,创建的节点依次入队。
2.创建好完全二叉树,堆排...
分类:
编程语言 时间:
2015-04-21 09:56:25
阅读次数:
165
/*
* 2015年4月19日 16:44:48
* 目的:用顺序存储结构来表示二叉树
* 二叉树比较难,所以更应该同过程序来好好理解二叉树的概念。
* 顺序存储是顺序储存在数组中的,以完全二叉树的形式,不存在的结点
* 在数组中用0表示。当二叉树是完全二叉树时,效率高而且简单
* 但是当不是完全二叉树时,会出现内存浪费的情况,这个程序仅仅
* 用来说明顺序结构怎么存储二叉树的,而且...
分类:
其他好文 时间:
2015-04-19 21:28:15
阅读次数:
151
1.首先看下完全二叉树的定义: 一棵深度为k,且有个节点称之为满二叉树;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。2.一条规则: 对任何一棵二叉树T,如果其终端结点数为,度为2的结点数为,则。 推导过程:n0是度为0的结点...
分类:
其他好文 时间:
2015-04-19 14:31:18
阅读次数:
131
堆排序,顾名思义利用堆的性质进行排序。堆都有哪些性质,比如:一堆沙子、一堆泥土二叉堆实际上是一课完全二叉树,同时满足:父结点的键值总是大于或等于(小于或等于)任何一个子结点的键值当父结点的键值总是大于或等于任何一个子结点的键值时称为 最大堆当父结点的键值总是小于或等于任何一个子结点的键值时称为 最小...
分类:
编程语言 时间:
2015-04-18 17:37:59
阅读次数:
145
几个概念:
完全二叉树:是指除叶子节点那层外,叶子节点以上的第k层都含有2k2^k个节点而且叶子节那层的节点都靠左方。
满二叉树:与完全二叉树先比,多了连叶子节点也要全满的限制条件。
堆的代码实现(数组实现):int heap[10000], sz = 0;void push(int x) { //向堆里面增加元素X
int i = sz++, p;
while(i > 0)...
分类:
其他好文 时间:
2015-04-17 22:22:15
阅读次数:
202
堆排序
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。
堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]]
>= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
维护堆的性质
M...
分类:
其他好文 时间:
2015-04-17 11:37:45
阅读次数:
138
排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的...
分类:
编程语言 时间:
2015-04-16 21:15:41
阅读次数:
124
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都...
分类:
编程语言 时间:
2015-04-16 13:58:35
阅读次数:
170
1.概述: 堆的概念:堆是一种完全二叉树,其高度为log(n),可以用一维数组来实现。堆中存储的数据是局部有序的。可分为两种堆:最大顶堆和最小顶堆。 最大顶堆:任意一个结点的值都大于等于其任意一个子结点的值。 最小顶堆:任意一个结点的值都小于等于其任意一个子结点的值。可以发现,堆的罗辑结构是树...
分类:
其他好文 时间:
2015-04-09 16:51:25
阅读次数:
145