堆
定义:堆是一个完全的二叉树,每个节点都满足(任一父节点的键值都不小于子节点的键值)

非升序排列的二叉树

存储的方式
- 根节点存在H[1]
- 节点H[i]左右子节点存在H[2i]、H[2i+1]
- 节点H[j]父节点为

基本操作
make-heap nlog(n) 即
insert
shift-down


insert(H,x) 插入所需时间为O(logn)树的高度
delete(H,i)

delete-max(H)

辅助运算
- Shift-up
- Shift-down




堆排序

- 创建最大堆
- 把根节点与最后一个节点交换
- 再创建最大堆
- 再交换
不相交集(Disjoint Sets)
- 每个元素不相同
- 可以用树表示




路径压缩师,秩不会变
