一些简单的实现
- 简单链表
- 二叉查找树
二叉堆(又称堆)
堆是完全二叉树,任意节点子树上的所有节点 <= 当前节点(有顺序)
完全二叉树:底层上的元素从左到右填入。
完全二叉树可以用数组表示
- 对于数组中任一位置 i 上的元素,其左儿子在位置 2i 处,右儿子在位置 2i+1 处。它的父亲则在位置 i/2 处。
堆的插入操作
上率:检查下一个空位的父亲节点,父亲节点 > 插入值则将父亲节点移入当前空位,父亲节点 < 插入值则插入值放入当前位置。
堆的删除最小值操作
下率:取出最小的根节点,取堆的最后一个节点 last,若较小子节点 < last,较小子节点上浮,反之将 last 节点放入
降低关键字的值
上率
增加关键字的值
下率
删除P位置节点
先降低关键字的值到最小
然后再做 DeleteMin 操作
构建堆
先将关键字按任意顺序放入堆
然后用下面的算法排序
for( i = N/2; i > 0; i-- )
PercolateDown( i ); // 下率
d-堆
所有的节点都有d个儿子
网友评论