heapsort.java

来自「java实现的各种排序算法:插入排序、起泡排序、希尔排序等。」· Java 代码 · 共 68 行

JAVA
68
字号
package org.rut.util.algorithm.support; 


/** 
* @author treeroot 
* @since 2006-2-2 
* @version 1.0 
*/ 
public class HeapSort implements SortUtil.Sort{ 

   /* (non-Javadoc) 
    * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[]) 
    */ 
   public void sort(int[] data) { 
       MaxHeap h=new MaxHeap(); 
       h.init(data); 
       for(int i=0;i<data.length;i++) 
           h.remove(); 
       System.arraycopy(h.queue,1,data,0,data.length); 
   } 

    private static class MaxHeap{         
        
       void init(int[] data){ 
           this.queue=new int[data.length+1]; 
           for(int i=0;i<data.length;i++){ 
               queue[++size]=data[i]; 
               fixUp(size); 
           } 
       } 
        
       private int size=0; 

       private int[] queue; 
                
       public int get() { 
           return queue[1]; 
       } 

       public void remove() { 
           SortUtil.swap(queue,1,size--); 
           fixDown(1); 
       } 
       //fixdown 
       private void fixDown(int k) { 
           int j; 
           while ((j = k << 1) <= size) { 
               if (j < size && queue[j]<queue[j+1]) 
                   j++; 
               if (queue[k]>queue[j]) //不用交换 
                   break; 
               SortUtil.swap(queue,j,k); 
               k = j; 
           } 
       } 
       private void fixUp(int k) { 
           while (k > 1) { 
               int j = k >> 1; 
               if (queue[j]>queue[k]) 
                   break; 
               SortUtil.swap(queue,j,k); 
               k = j; 
           } 
       } 

   } 

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?