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

来源:互联网 发布:美国大数据公司 年薪 编辑:程序博客网 时间:2024/06/06 16:43

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])//只要符合小根堆的条件了就breakbreak;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>());}


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

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




0 0