JAVA语言之堆排序

11 篇文章 0 订阅

实现的是大根堆

代码如下:

public static int[] heapSort(int[] A, int n) {
//先建立一个大根堆
A=getDui(A);
//进行一个个的排序拖出从根顶开始
for(int i=n-1;i>0;i--){
int t=A[0];
A[0]=A[i];
A[i]=t;
//每次从根底取值然后长度-1然后进行大根堆的化简
adjustHead(A, 0, i);
}
return A;
}
 
public static int[] getDui(int[] A){
for(int i=A.length/2;i>=0;i--){
 adjustHead(A,i,A.length);
 //每一个i都是根节点的值
}
return A;
}
 
public static void adjustHead(int[] A,int k,int n){
    int tem=A[k];//每次保留根节点
    for(int i=2*k+1;i<n;i=2*i+1){//此时i表示的是当前根节点k下的左结点
        if(i!=n-1 && A[i]<A[i+1]){
        i++;//根节点下面的左结点比右节点小,则i就要+1;
        }
        if(tem>A[i]){//这里是判断根节点和下面的左结点或者右节点进行比较
        break;
        }else{//如果根不大于的话则又要进行下一层的比较
        A[k]=A[i];
        //所以这里有
        k=i;//再进行k=i作为根节点的一层,当然i和k都小于长度n
        }
    }
    A[k]=tem;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值