堆排序是排序的一种,一般有大根对和小根堆之说,大根对,根节点的值比左右子树的根节点的值要大。建堆我们一般是一个完全二叉树。堆排序一般面向数据量比较大的时候,数据量比较小的时候,不适合使用堆排序,比如有种情况就是topN算法的实现,一般都是借助于一个大根对来实现,扫描海量数据,把海量数据中的把最大的前 ...
分类:
编程语言 时间:
2017-03-19 17:38:34
阅读次数:
203
堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者 ...
分类:
其他好文 时间:
2017-03-18 17:26:41
阅读次数:
170
转自:PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地 分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建 ...
分类:
其他好文 时间:
2017-03-17 19:04:24
阅读次数:
270
1.双链表SplDoublyLinkedList 结构如图: 类定义: 测试代码: 2.栈SplStack 结构: 栈继承了双向链表的所有方法 3.队列SplQueue 结构图: 继承了双向链表所有方法 另添加了两个方法 4.堆SplHeap 堆是完全二叉树,且节点值比左右孩子的值大(大顶堆)或者比 ...
分类:
Web程序 时间:
2017-03-13 00:08:42
阅读次数:
244
堆是有特殊顺序的完全二叉树。常用数组存储。 以最小堆为例。其父节点,要小于左右两个子节点。如此递归定义。 数组存储。第i个节点的父节点是 (i-1)/2, 左子节点是2*i+1, 右子节点是2*i+2。当然是在考虑到数组边界的情况下。 其实堆运算很简单。只要清楚存储结构,明白插入,删除,建立时调整方 ...
分类:
编程语言 时间:
2017-03-12 11:15:49
阅读次数:
168
线段树的入门级 总结 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节 ...
分类:
其他好文 时间:
2017-03-11 23:55:04
阅读次数:
331
几个总忘的点儿: 结点的深度:一个结点向上移动到其父节点——是一步,再移动到父结点的父结点——是两步,移动到了根结点——结点的深度 树的深度:所有叶子结点的最大深度 数组存储完全二叉树:某个Node在数组中的位置为[i],其父结点则是在[(i-1)/2],其两个孩子则是[2i+1],[2i+2] 树 ...
分类:
其他好文 时间:
2017-03-11 21:50:31
阅读次数:
223
转自 http://www.jianshu.com/p/e37495f72cf6 hihocoder 1342 解释:题目描述了一种用ASCII码绘制的满二叉树,然后将树的根设置在一个特殊坐标轴的原点(0,0),坐标轴x向下为正向,y向右是正向。树的每个树枝与节点都占用1*1的大小。现在需要求在坐标 ...
分类:
其他好文 时间:
2017-03-11 00:55:25
阅读次数:
304
Java实现 二叉树的几种遍历方式,主要世纪路一下二叉树的层次遍历。构造一颗完全二叉树。 ...
分类:
编程语言 时间:
2017-03-05 11:33:01
阅读次数:
288
由于是满二叉树,用数组既可以表示父节点是i,则左孩子是2*i,右孩子是2*i+1另外根据二分搜索树的性质,中序遍历恰好是从小到大排序因此先中序遍历填充节点对应的值,然后再层次遍历输出即可。 又是一道遍历的水题。。。 #include <iostream> #include <cstdio> #inc ...
分类:
其他好文 时间:
2017-03-02 12:58:39
阅读次数:
162