public class BinaryHeap4 <T extends Comparable<? super T>>
{
private T[] array=(T[])new Comparable[100];
private int currentSize;
public void insert(T x)
{
int hole=++currentSize;
T tmp=x;
for(;hole>1 && x.compareTo(array[hole/2]) <0;hole/=2)
array[hole]=array[hole/2];
array[hole]=tmp;
for(int i=1;i<=currentSize;i++)
System.out.print(array[i]+" ");
System.out.println();
}
public void build()
{
for(int hole=currentSize/2;hole>0;hole--)
percolateDown(hole);
for(int i=1;i<=currentSize;i++)
System.out.print(array[i]+" ");
System.out.println();
}
public BinaryHeap4(T[] items )
{
for(int i=1;i<items.length;i++)
array[i]=items[i];
currentSize=items.length-1;
build();
}
public T delete()
{
T min=array[0];
array[1] =array[currentSize--];
percolateDown(1);
for(int i=1;i<=currentSize;i++)
System.out.print(array[i]+" ");
System.out.println();
return min;
}
private void percolateDown(int hole)
{
int child;
T tmp=array[hole];
for(;hole*2<=currentSize ;hole=child)
{
child=hole*2;
if(child+1<=currentSize && array[child+1].compareTo(array[child])<0)
child++;
if(array[child].compareTo(tmp)<0)
array[hole]=array[child];
else
break;
}
array[hole]=tmp;
}
private void swap(int x,int y)
{
T tmp=array[x];
array[x]=array[y];
array[y]=tmp;
}
public static void main(String[] args)
{
BinaryHeap4<Integer> heap=
new BinaryHeap4<>(new Integer[]{-11,31,12,32,54,5,34,89,134,22,58,23});
heap.delete();
heap.insert(55);
}
}
堆
最新推荐文章于 2024-03-29 10:53:05 发布