最容易理解的堆排序

大数据算法种有一类题求解问题(应用场景)
1、求解在n 个数据种前 k个最大数据或最小数据的(或出现次数最多或次数最小的 前k个数)
解答:一般这类解法除了常用大数据 MR 思想外。如果内存比较大的化我们可以采用维护最大最小堆的方式

2、大顶堆的图示
在这里插入图片描述
3、 堆排序的具体流程图:
在这里插入图片描述
在这里插入图片描述

注意理解概念:堆蓝色部分表示无序区,黄色部分表示有序区。

4、堆排序的具体步骤
(1、无序区进行初始化然后生产大顶堆。
(2、将大顶堆的堆顶元素按照顺序(由右到左 一层一层向上轮询)等方式挨个替换挨着有序元素的值。完成堆排序的过程
(3、在构建大顶堆的过程中是每次顶节点与左右子节点比较大小,将最大的元素归结到堆顶并递归完成大顶堆的构建过程。

注意:理解代码-》i节点的孩子节点为 2i +1和 2i+2 ;i节点的 父节点为:(i-1)/2;最后一个非叶子节点:n/2 - 1;下面的代码是实现的大根堆,把元素从小到大依次排序;
堆排序的java 实现:
在这里插入图片描述
在这里插入图片描述

5、堆的存储空间
1)、堆排序的空间存储的占用大小为数组长度K,空间复杂度O(1)
2)、堆的时间复杂度
堆排序的时间复杂度,主要在初始化堆过程和每次选取最大数后重新建堆的过程如果对k个值进行堆排序。
初始化建立堆的过程种O(k)
更改堆元素后重建堆时间:O(klogk)
所以堆是很好兼容时间和空间复杂度

6、堆排序的优势:
一般堆的存储都采用数组的方式,然后通过数组指针的坐标方式记录堆的存储顺序(父节点和子几点的关系和位置)方式交换堆的父节点和子节点的维护堆的存储

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值