【堆】这是要搞事情啊——建立

interesting!堆:简单的说就是一棵完全二叉树的先序,满足任意父结点大于子结点的叫大根堆,反之则是小根堆。


建立

建立(小根堆)算法(简单粗略加通俗):

循环以下步骤

把此数(a[i])“塞”到堆尾,然后不停的和它父结点(a[i/2])比较,小就换。


给一个硬模拟的代码:

void put(int k)
{
	int now,next;//now子结点,next父结点
	heap[len++]=k;
	now=len-1;
	while(now>1)
	{
		next=now/2;
		if(heap[now]>=heap[next])//只要符合小根堆的条件了就break
			break;
		swap(heap[now],heap[next]);//否则就交换
		now=next;
	}
}

其实不难懂,但是像我们这种懒癌党怎么会愿意打呢

以下是直接用STL库函数的代码,两行解决(需添加algorithm、iostream及using namespace std头文件):

void put(int k)
{
	heap[len++]=k;
	//push_heap(heap,heap+len);
	push_heap(heap,heap+len,greater<int>());
}


好吧。似乎并没有什么用……

其他堆的东西继续写,也在这个分类,后面会有例子的,




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值