java - minheap 按什么顺序排序?
问题描述
我一直在阅读有关 minHeap 和 maxHeap 的各种定义。我偶然发现了这样的陈述:
- minHeap 用于降序排序。
- maxHeap 用于升序排序。
摘自https://www.geeksforgeeks.org/heap-sort-for-decreasing-order-using-min-heap/中“注释”的陈述。但是当我在 Java 中使用默认比较器实现 minHeapPriorityQueue<Integer>
并 poll() 它时,我得到了最小元素。这是为什么?感谢任何试图提供帮助的人:)。
解决方案
博客中的解释是正确的
在仔细查看heapSort()
函数的同时,它巧妙地利用了最小堆。数组的最小元素被最后一个元素替换,堆的大小再次减少 1 heapify()
。
arr[0]
-> 表示最小的元素。
在每次迭代中,对于i
from n-1
to 0
, arr[0] 与 the 交换,arr[i]
并且堆再次被堆化,其大小比前一次迭代小 1。
推荐阅读
- javascript - 传单图例添加和删除到连接的 layerGroup
- hyperledger-fabric - fabric-ca-client 找不到 ./utils.js
- c++ - 我可以从 C++ 中的某一行开始代码吗?
- javascript - 理解 java/apex 复杂的三元运算符
- mongodb - 使用 mongoose 在 mongoDB 中使用数据类型数组更新字段
- vert.x - Quarkus:当我从 Verticle 调用 db 时出现 ContextNotActiveException
- go - 使用结构解析 JSON
- python - 用于选择日历月份的 Python 组合框
- sql - 如何包括现金输入
- r - 使用 mailR (send.mail) 在电子邮件中添加多个表