二叉堆实现优先队列
undefinedundefined
JAVA版#
public class PQ<Key extends Comparable<Key>> {
private Key[] pq;
private int N;
public PQ(int cap) {
pq = (Key[]) new Comparable[cap + 1];
}
public Key max() {
return pq[1];
}
public void insert(Key e) {
N++;
pq[N] = e;
swim(N);
}
public Key delMax() {
exch(1, N);
N--;
sink(1);
return max();
}
private int parent(int k) {
return k / 2;
}
private int left(int root) {
return root * 2;
}
private int right(int root) {
return root * 2 + 1;
}
private void swim(int k) {
while (k > 1 && less(parent(k), k)) {
exch(parent(k), k);
k = parent(k);
}
}
private void sink(int k) {
while (k <= N) {
int old = left(k);
if (right(k) <= N && less(old, right(k))) {
old = right(k);
}
if (less(k, old)) {
exch(k, old);
k = old;
} else {
break;
}
}
}
private void exch(int i, int j) {
Key temp = pq[i];
pq[i] = pq[j];
pq[j] = temp;
}
private boolean less(int i, int j) {
return pq[i].compareTo(pq[j]) < 0;
}
public static void main(String[] args) {
PQ<Integer> t = new PQ<>(3);
t.insert(1);
t.insert(20);
t.insert(15);
System.out.println(t.max());
System.out.println(t.delMax());
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!