堆的标准模板
来源:互联网 发布:软件界面素材下载 编辑:程序博客网 时间:2024/05/18 03:36
向下搜索函数,对堆的有序性进行维护(重点)
void downsearch(int low,int high)
{
int i=low; // i的意思是现在的节点位置(用的数组存储二叉树)
int j=low*2; //子结点
while(j<=high) //在high范围内
{
if(heap[j]<heap[j+1]&&j+1<=high)
{
j=j+1; //左右孩子寻找最大的一个(大根堆,大的向上走)
}
if(heap(j)>heap(i))
{
swap(heap(j),heap(i)); //交换值
i=j; //更新现在处理的节点
j=i*2;
} else break; //孩子权值比要调整的结点小,完成调整
}
}
void creat() //对一个数组进行堆的调整
{
for(int i=n/2;i>=1;i--) //倒序是为了保证每一次的最上方的结点为最大
{
downsearch(i,n);
}
}
void del() //删除根结点
{
heap[1]=heap[n]; //根结点赋值为叶子结点
n=n-1;
downsearch(1,n); //堆的维护
}
void add(int low,int high) //加入结点
{
int i=high; //从下往上维护
int j=high/2; //父亲结点
while(j>=low)
{
if(heap[i]>heap[j])
{
swap(heap[i],heap[j])
i=j; //更新结点位置
j=i/2;
}
else break; //调整完毕
}
}
void sort() //实现堆排序的函数
{
for(int i=n;i>1;i--) //因为是大根堆,所以根结点一定最大,据此调整
{
swap(1,n);
down(1,i-1); //最后的叶子结点已经是最大的值,对前面的结点调整;
}
}
- 堆的标准模板
- 堆排序的模板
- 【模板】堆的结构
- Duan2baka的手写堆模板!
- C++的标准模板库
- 标准的make file 模板
- 线性表的标准模板
- jQuery标准的AJAX模板
- 堆的创建、插入、删除,模板参数实现堆以及模板的模板参数实现堆
- 堆模板
- 堆模板
- 堆模板
- 堆模板
- 堆模板
- [模板]堆
- 【模板】堆
- 堆模板
- 堆模板
- 由DocumentsUI 得到文件path
- 基础——仿射变换矩阵与warpAffine
- POJ 1472Instant Complexity(模拟+dfs)
- usaco fencing the cows
- JDK中java.io.InputStream源码
- 堆的标准模板
- poj2109
- Tortoisegit的setting中没有remote选项无法配置
- 关于java调用本地应用程序
- emacs 安装 plantuml
- QT——设置可执行文件图标
- 道哥:我回阿里的29个月和职业生涯的6点感想【深度好文,值得收藏】
- 欢迎使用CSDN-markdown编辑器
- 浏览器兼容性问题以及解决方法1