posts - 1,  comments - 0,  trackbacks - 0
            2008年9月2日
          @SuppressWarnings("unused")
          public class MyHeap{
              
              
          private static final int MAX_SIZE = 1001;

              
          private int CUR_SIZE;      
             
              
          private Comparable[] DATA;
              
              
          public MyHeap() {
                  CUR_SIZE 
          = 0;
                  DATA 
          = new Comparable[ MAX_SIZE + 1 ];
              }

              
              
          public MyHeap( Comparable [] items ) {
                  CUR_SIZE 
          = items.length;
                  DATA 
          = new Comparable[ items.length + 1 ];
                  
                  
          forint i = 0; i < items.length; i++ )
                      DATA[ i 
          + 1 ] = items[ i ];
                  buildHeap();
              }

              
              
          public void insert( Comparable x ) {
                  
          if( CUR_SIZE + 1 == DATA.length )
                      doubleArray( );
                  
                  
          // Percolate up
                  int hole = ++CUR_SIZE;
                  DATA[ 
          0 ] = x;
                  
                  
          for( ; x.compareTo( DATA[ hole / 2 ] ) < 0; hole /= 2 ) {
                      DATA[ hole ] 
          = DATA[ hole / 2 ];
                  }

                  DATA[ hole ] 
          = x;
              }

              
              
          public Comparable findMin( ) {
                  
          return DATA[ 1 ];
              }

              
              
          public Comparable deleteMin( ) {
                  Comparable minItem 
          = findMin( );
                  DATA[ 
          1 ] = DATA[ CUR_SIZE-- ];
                  percolateDown( 
          1 );
                  
                  
          return minItem;
              }

              
              
          private void buildHeap( ) {
                  
          forint i = CUR_SIZE / 2; i > 0; i-- )
                      percolateDown( i );
              }

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

              
              
          public int size( ) {
                  
          return CUR_SIZE;
              }

              
              
          public void makeEmpty( ) {
                  CUR_SIZE 
          = 0;
              }

              
              
          private void percolateDown( int hole ) {
                  
          int child;
                  Comparable tmp 
          = DATA[ hole ];
                  
                  
          for( ; hole * 2 <= CUR_SIZE; hole = child ) {
                      child 
          = hole * 2;
                      
          if( child != CUR_SIZE &&
                              DATA[ child 
          + 1 ].compareTo( DATA[ child ] ) < 0 )
                          child
          ++;
                      
          if( DATA[ child ].compareTo( tmp ) < 0 )
                          DATA[ hole ] 
          = DATA[ child ];
                      
          else
                          
          break;
                  }

                  DATA[ hole ] 
          = tmp;
              }
              
              
              
          private void doubleArray( ) {
                  Comparable [] newArray;
                  
                  newArray 
          = new Comparable[ DATA.length * 2 ];
                  
          forint i = 0; i < DATA.length; i++ )
                      newArray[ i ] 
          = DATA[ i ];
                  DATA 
          = newArray;
              }

          }
          posted @ 2008-09-02 15:51 水牛♂Toto 閱讀(215) | 評論 (0)編輯 收藏
          僅列出標題  
          主站蜘蛛池模板: 连江县| 抚宁县| 泉州市| 宣汉县| 松滋市| 驻马店市| 仪征市| 余庆县| 江安县| 吴桥县| 邢台县| 孙吴县| 明溪县| 宁安市| 分宜县| 长宁区| 连云港市| 呼玛县| 桓仁| 建水县| 镇原县| 平舆县| 庄河市| 仁怀市| 奉新县| 黄骅市| 江华| 嵊州市| 浪卡子县| 青州市| 遵义市| 根河市| 延津县| 武定县| 永和县| 松阳县| 安福县| 滕州市| 资溪县| 咸宁市| 新余市|