java 实行 minheap_最小堆排序MinHeap

MinHeap基本性质

最小堆中的最小元素值出现在根结点(堆顶);

堆中每个父节点的元素值都小于等于其孩子结点(如果存在)

MinHeap用途

1.求一个数列中的第K大的数,建立一个大小为K的最小堆,堆顶就是第K大的数

2.递归去除最顶元素,用于取top K等。

MinHeap可设置容量上限N带来两个好处:

内存占用可控

因为上限N的存在,可提高添加和删除元素的速度

以上述思想,接下来开始java编码:

我们要用inputs=[1, 2, 5, 12, 7, 17, 25, 19, 36, 99, 22, 28, 46, 92]中的14个元素来建立最小堆;输出top 为data

1.建堆

对于inputs中的每个元素调用add方法,建堆后是完全二叉树,并且所有父节点都比子节点小

public voidadd(T ele) {int size =data.size();if (size

data.add(ele);//堆底添加新元素

heapUp(size);//然后从末位置开始向上调整

} else{if (ele.compareTo(data.get(0)) > 0) {//如果大于堆顶元素则更新

data.set(0, ele); //替换顶元素

heapDown(0);//从上到下调整堆排序

}

}

}

2.向下调整代码

从堆顶某一

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值