package com.test;
import java.util.Arrays;
public class BinaryHeap<E extends Comparable<? super E>> {
private E[] theList;
private int currentSize;
private int hole;
public BinaryHeap() {
theList = (E[]) new Comparable[10];
}
public void insert(E e) {
if (currentSize == 0) {
theList[1] = e;
} else {
for (; e.compareTo(theList[hole / 2]) < 0; hole /= 2) {
theList[hole] = theList[hole / 2];
}
theList[hole] = e;
}
++currentSize;
hole = 1 + currentSize;
}
public void deleteMin() {
E e = theList[1];
theList[1] = theList[currentSize--];
theList[currentSize+1] =null;
percolateDown(1);
this.hole = currentSize+1;
}
public void percolateDown(int hole) {
E tmp = theList[hole];
int child = hole * 2;
for (; child <= currentSize; child *= 2) {
if (theList[child + 1] != null
&& theList[child + 1].compareTo(theList[child]) < 0) {
child++;
}
if (tmp.compareTo(theList[child]) > 0) {
theList[hole] = theList[child];
hole = child;
} else {
break;
}
theList[hole] = tmp;
}
}
public static void main(String[] args) {
BinaryHeap<Integer> bh = new BinaryHeap<>();
bh.insert(1);
bh.insert(4);
bh.insert(5);
bh.insert(2);
bh.insert(3);
bh.deleteMin();
System.out.println(bh.getTheList());
}
private E[] getTheList() {
return theList;
}
private void setTheList(E[] theList) {
this.theList = theList;
}
}