堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都...
分类:
编程语言 时间:
2015-05-09 17:25:40
阅读次数:
166
//你知道为什么快速排序的时间复杂度是nlgn吗?
//我们将数组当作完全二叉数来看的话,放在小堆中,
//每个节点排序需要o(h),也就是h次,h是完全相应节点的二叉树高度,
//N为总共节点数,排好一个节点需要o(h)次,那么排好N个节点呢?下面:
//且2^h=N-1(完全二叉树性质);
//—>h=log2(N);当有N个节点需要排序是就是N*lg(N),
//得到快速排序的时...
分类:
编程语言 时间:
2015-05-09 10:22:04
阅读次数:
163
1.堆的概念
参考:http://www.cnblogs.com/luchen927/archive/2012/03/08/2381446.html
堆(heap),一种数据结构,堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元...
分类:
编程语言 时间:
2015-05-07 12:30:53
阅读次数:
137
二叉树顺序存储结构
二叉树的顺序存储结构就是用一维数组存储二义树中的结点并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等。
顺序存储结构一般只用于完全二叉树。
将这棵二叉树存入到数组中,相应的下标对应其同样的位置:
二叉链表
typedef struct BiTNode /* 结点结构 */
{
TElemType...
分类:
其他好文 时间:
2015-05-06 23:00:42
阅读次数:
193
堆堆的基本性质堆也可以说是一个完全二叉树,就是除了最底层的,其它层是满的,既然我们可以用完全二叉树来表示一个堆,那么我们这里就采用数组结构的二叉树来阐述堆的性质。
假设在这里我们用数组A表示堆,A[i]表示堆里面的第i个元素,于是我们通过二叉树的性质可知:
- PARENT(i) = i/2
- LEFTCHILD(i) = 2*i
- RIGHTCHILD(i) = 2*i+1就如下图表现...
分类:
其他好文 时间:
2015-05-05 22:03:55
阅读次数:
250
一.堆的介绍
堆有如下特点的二叉树:
1.他是完全的二叉树。也就是说,除了树的最后一层布需要时满的,其他的每一层从左到右都是满的.(如下图的完全二叉树跟不完全二叉树)
2.它常常用一个数组在实现。(如下图显示了堆它与数组之间的关系。堆在存储器中的表示是数组;堆只是概念上的表示。注意树是完全二叉树,...
分类:
编程语言 时间:
2015-05-05 21:46:49
阅读次数:
195
/*
* 时间:2015年5月4日09:58:21
* 目的:实现二叉树的先序遍历递归。
* 总结和思考!二叉树一般使用链式存储结构
* 如果使用顺序存储方式,除非二叉树是完全二叉树或者满二叉树
* 否则会浪费很多内存空间!
*/
# include
typedef struct Node{
char data; //数据元素
Node *LChild; //左孩子节点
...
分类:
其他好文 时间:
2015-05-04 12:02:43
阅读次数:
379
顺序存储结构二叉树存储结构的类型定义:#define MAX_SIZE 100
typedef telemtype sqbitree[MAX_SIZE];用一组地址连续的存储单元依次“自上而下、自左至右”存储完全二叉树的数据元素。
对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-6(c)所示。
对于一般的二叉树,将其每个结点与完全二叉树上的结...
分类:
其他好文 时间:
2015-04-30 10:44:48
阅读次数:
133
堆就是一个完全二叉树,堆要求是指 该节点大于它的两个子节点。而两个字节点大小不一定。堆排序的最坏时间复杂度为nlog(n),平均也为nlog(n),占用空间为o(1),是一种比较排序算法。堆排序也可以用于找最大的k个数。时间复杂度为klog(n),因为建堆后,每次循环实际上都生成一个最大数。下面见代...
分类:
编程语言 时间:
2015-04-28 11:16:36
阅读次数:
161
转自:http://blog.csdn.net/sqx2011/article/details/8241734胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。 不同的是,胜者树的中间结点记录的是胜者的标号;而败者树...
分类:
编程语言 时间:
2015-04-25 13:26:08
阅读次数:
390