数据结构 java实现大根堆

public class Main {
//大根堆算法
    public static void main(String[] args) {
         int []array = new int[]{0,53,17,78,9,45,65,87,32};//用a[0]=0是为了使用规则:某一个节点的序号/2,是其父母节点的序号。
         for(int i=array.length/2;i>=1;i--){//从最后一个节点的双亲节点开始
                rush(array,i,array.length);
         }
         for(int i=0;i<array.length;i++){
             System.out.print(array[i]+" ");
         }


    }
    public static void rush(int a[],int x,int length){
        int temp=a[x];//找一个值记录节点值
        for(int i=2*x;i<=length;i=2*i){

            if(i+1<length&&a[i]<a[i+1]){//子节点找到大的那个孩子的下标位置
                i++;
            }
            if(temp>=a[i]){
                break;//如果父母节点大于子节点就没必要再继续下去
            }
            if(temp<a[i]){
                a[x]=a[i];
                a[i] = temp;
                x=i;

            }

        }
    }
}

 

posted @ 2021-03-25 16:38  chenyuan#  阅读(82)  评论(0)    收藏  举报