首页 > 技术文章 > 构建最大堆

javalixue 2013-12-18 16:18 原文

public class Heap{
public static void main(String[] args){
    Heap h=new Heap();
    int[] heap=new int[]{1,2,3,4,5,6,7,8,9};
    h.buildMaxHeap(heap);
    for(int i=0;i<heap.length;i++){
        System.out.print(heap[i]+" ");
    }
}
public void buildMaxHeap(int[] heap){
    for(int i=heap.length-1;i>=0;i--){
         maxHeap(heap,i,heap.length);
    }
}
public void maxHeap(int[] heap,int index,int len){
    int left=(index<<1)+1;
    int right=(index<<1)+2;
    int largest=index;
    if(left<len&&heap[left]>heap[largest]){
        largest=left;
    } 
    if(right<len&&heap[right]>heap[largest]){
        largest=right;
    } 
    if(largest!=index){
        swap(heap,largest,index);
        maxHeap(heap,largest,len);
    }
}

public void swap(int[] heap,int left,int right){
    int tmp=heap[left];
    heap[left]=heap[right];
    heap[right]=tmp;
}
}

 

推荐阅读