概述
堆常用来实现优先队列,在这种队列中,待删除的元素为优先级最高(最低)的那个。在任何时候,任意优先元素都是可以插入到队列中去的,是计算机科学中一类特殊的数据结构的统称
堆的定义:最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。注意:
- 堆中任一子树亦是堆。
- 以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。
- 左右子节点不大于(不小于)父节点。
堆排序是根据堆中的根节点是最大或最小值来排序的。
理论
http://blog.csdn.net/morewindows/article/details/6709644
http://blog.csdn.net/wypblog/article/details/8076324
http://blog.csdn.net/v_july_v/article/details/6198644
动画
代码(PHP)
1.堆定义极其排序方法
class Heap{
protected $tree = array();//数组存储的完全二叉树
protected $type= 'max';//max-最大堆,min-最小堆
public function __construct($arr=null,$type='max'){
$this->initHeap($arr,$type);