堆排序,细节讲明 Java

在我们了解之后,会接触到堆排序这个排序算法

很多新手会遇到一些疑问我这里做一个分享和解决

毕竟我也是新手,希望能帮上大家

堆排序的基本概念示意图之类的大家可以看这位博主的很赞

http://t.csdn.cn/00rkV

我只是对这一段代码的,为啥要进行两次for,以及为啥调用heapAdjest方法时

第一次for时是从arr.length - 1开始到0

第二次for时却是0开始

public static void HeapSorting(int[] arr) {
    for (int i = arr.length - 1; i >=0; i--) {//建堆
        heapAdjest(arr, i, arr.length);
    }
    for (int i = arr.length - 1; i >= 0; i--) {//维系
        int temp = arr[0];
        arr[0]=arr[i];
        arr[i] = temp;
        heapAdjest(arr, 0, i);
    }
}

这里就是一个建堆的概念,刚刚开始时我们得到的数组无序的,我们通过第一次for建堆的到大顶堆(我这里是用法的大顶堆,我推荐的博主也是大顶堆,小顶堆同理),

第二个for则是我们不断的将根节点和i节点交换,我们再调用heapAdjest,保持住这个大顶堆

第一次学堆排序或者对堆排序任然有些不熟练的我建议可以照着推荐的博主的代码敲两遍(最好注释也跟写加强理解)

加油各位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值