最大堆
最大堆和最小堆是二叉堆的两种形式。
最大堆:根结点的键值是所有堆结点键值中最大者,且每个结点的值都比其孩子的值大。
最小堆:根结点的键值是所有堆结点键值中最小者,且每个结点的值都比其孩子的值小。
最大堆的父元素与子元素的索引有如下关系
在最大堆中,设根节点索引从1开始,当父节点索引为i时,左孩子节点2*i , 右孩子索引2*i+1。
实现最大堆
定义最大堆的数据结构和构造函数
堆中数据的存储我们可以使用数组来实现,非常方便。
public class MaxHeap {
private int data[]; //存放堆数据的数组
private int size; //当前堆的大小
private int capacity; //堆的最大容量
public MaxHeap(int maxSize){
//数组索引为0的位置不放元素
data = new int[maxSize+1];
this.size = 0;
this.capacity = maxSize;
}
}
向堆里面插入元素
向堆里插入元素,首先将数据放到数据的最后一个位置,然后通过与其父元素比较,不断上移,直到该元素处于正确的位置。