public class BinaryHeap<AnyType extends Comparable<? super AnyType>> {

private static final int DEFAULT_CAPACITY = 10;
    private AnyType[] array;
    private int currentSize;

public BinaryHeap() {

this(DEFAULT_CAPACITY);
    }

public BinaryHeap(int capacity) {
        currentSize = 0;
        array = (AnyType[]) new Comparable[capacity];

}

public BinaryHeap(AnyType[] items) {
        currentSize = items.length;

array = (AnyType[]) new Comparable[(array.length + 2) * 11 / 10];

int i = 0;
        for (AnyType item : items) {
            array[i++] = item;
            buildHeap();
        }

}

public void makeEmpty() {
        currentSize = 0;
    }

public boolean isEmpty() {
        return currentSize == 0;
    }

public AnyType findMin() {
        if (isEmpty())
            System.out.println("this is empty");
        return array[1];
    }
     private void enlargeArray( int newSize )
        {
            AnyType [] old = array;
            array = (AnyType []) new Comparable[ newSize ];
            for( int i = 0; i < old.length; i++ )
                array[ i ] = old[ i ];        
        }
     public void insert( AnyType x )
        {
            if( currentSize == array.length - 1 )
                enlargeArray( array.length * 2 + 1 );

// Percolate up
            int hole = ++currentSize;
            for( ; hole > 1 && x.compareTo( array[ hole / 2 ] ) < 0; hole /= 2 )
                array[ hole ] = array[ hole / 2 ];
            array[ hole ] = x;
        }

public AnyType deleteMin() {
        if (isEmpty())
            System.out.println("this is empty");

AnyType minItem = findMin();
        array[1] = array[currentSize--];
        percolateDown(1);

return minItem;
    }

private void buildHeap() {
        for (int i = currentSize / 2; i > 0; i--)
            percolateDown(i);
    }

private void percolateDown(int hole) {

int child;
        AnyType tmp = array[hole];
        for (; hole * 2 < currentSize; hole = child) {

child = hole * 2;
            if (child != currentSize
                    && array[child + 1].compareTo(array[child]) < 0) {
                child++;
            }
            if (array[child].compareTo(tmp) < 0)
                array[hole] = array[child];
            else
                break;
        }
        array[hole] = tmp;
    }

public static void main( String [ ] args )
        {
            int numItems = 10000;
            BinaryHeap<Integer> h = new BinaryHeap<Integer>( );
            int i = 37;

for( i = 37; i != 0; i = ( i + 37 ) % numItems )
                h.insert( i );
            for( i = 1; i < numItems; i++ )
                if( h.deleteMin( ) != i )
                    System.out.println( "Oops! " + i );
        }
    
    
}

最新文章

  1. jvm死锁解决
  2. html-tab page
  3. log4j的针对包和类的配置方法
  4. OutputCache缓存各参数的说明
  5. Javascript异步请求你能捕获到异常吗?
  6. 自己实现的android树控件,android TreeView
  7. OSChina底层数据库操作的类(QueryHelper)源代码
  8. [Python Study Notes]批量将ppt转换为pdf v1.0
  9. Java 到底是值传递还是引用传递
  10. Android ViewManager解读之requestLayout() 详解
  11. keil4编译Error: User Command terminated, Exit-Code = 1解决
  12. html文档知识补充
  13. svn代码发版的脚本分享
  14. Adam算法
  15. IOP知识点(4)
  16. vs2015 C#打包程序为exe
  17. 002_tmux详解
  18. JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型
  19. innerWidth outerWidth
  20. 把默认功能关闭,当做普通IO口使用。

热门文章

  1. Winform 进程、线程、treeview
  2. js onmouseleave
  3. windows系统调用 利用事件对象实现进程通信
  4. web移动前端的click点透问题
  5. 利用angular与后台的交互
  6. 【20160924】GOCVHelper 图像处理部分(1)
  7. SQL Server 查询表的记录数(3种方法,推荐第一种)
  8. 深入浅出设计模式——迭代器模式(Iterator Pattern)
  9. c语言期末复习题
  10. Centos 7环境下编译mysql 5.7