java简易优先队列(小顶堆)

本文介绍了一个基于Java实现的小顶堆优先队列。该队列通过自定义的Heap类实现,支持插入元素(offer)及弹出最小元素(poll)。文章详细展示了如何维护堆的性质,并提供了完整的源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java简易优先队列(小顶堆)

class Heap{
	private int[] heap;
	private int size;
	public Heap(int n)
	{
		heap = new int[n + 1];
		size = 0;
	}

	public void offer(int num)
	{
		int father = ((size - 1) >> 1), index = size;
		heap[index] = num;
		while (father >= 0)
		{
			if (heap[father] > heap[index])	swap(index, father);
			index = father;
			father = ((father - 1) >> 1);
		}
		size++;
	}

	public int poll()
	{
		int res = heap[0];
		swap(0, size - 1);
		int temp = heap[0];
		for (int i = 1;i < size - 1;i = (i << 1) + 1)
		{
			if (i + 1 < size - 1 && heap[i] > heap[i + 1])  i++;
			if (temp < heap[i]) break;
			heap[((i - 1) >> 1)] = heap[i];
			heap[i] = temp;
		}
		size--;
		return res;
	}

	private void swap(int indexA, int indexB)
	{
		int temp = heap[indexA];
		heap[indexA] = heap[indexB];
		heap[indexB] = temp;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值