堆(数组实现)
来源:互联网 发布:arena仿真软件 编辑:程序博客网 时间:2024/05/16 05:40
今天学了一下堆,用数组写的,贴出来。
/************************************************************************* > File Name: 堆.cpp > Author: 刘怪怪 > Mail: > Created Time: 2017年11月30日 星期四 22时21分19秒 ************************************************************************/#include<iostream>using namespace std;int h[101]; //用数组来存放堆int n; //堆的大小void swap(int x, int y){ int t; t=h[x]; h[x] = h[y]; h[y] = t; return;}//void siftdown(int i){ int t,flag=0; //flag用来标记是否需要继续向下调整 //当i 节点有儿子(至少为左儿子) while(i*2 <=n && flag ==0 ) { //首先判断它与左儿子的关系并用t记录值较小的节点编号 if(h[i] > h[i*2]) t=i*2; else t=i; //如果他有右儿子 if(i*2+1 <=n ) { //如果右儿子的值更小,更新较小节点的标号 if(h[t]>h[i*2+1] ) t= i*2+1; } //如果发现最小的节点编号不是自己,说明子节点中有比父节点更小的 if(t!=i) { swap(t,i); i=t;//更新i为刚才与它交换的儿子节点的编号,便于接下来继续向下调整 } else flag =1; } return;}//建立堆的函数void creat(){ int i; for (i=n/2 ; i>=1;i--) { siftdown(i); } return;}//删除最大的元素int deletemax(){ int t; t = h[1]; h[1] = h[n]; n--; siftdown(1); return t;}int main (){ int i,num; cin >> num; for (i=1;i<=num;i++) cin >> h[i]; n = num; creat(); for(i=1;i<=num;i++) cout << deletemax() << " "; cout << endl;}
阅读全文
0 0
- 堆(数组实现)
- 数组实现“堆”(数据结构)
- 堆(heap)基于数组的实现
- 数组实现堆排序(c++)
- 数组实现最小堆
- 堆的数组实现
- 数组实现堆
- 堆的数组实现
- 堆排序【数组实现】
- 数据结构与算法(C#实现)---二叉堆(数组实现)
- 堆数组实现评委评分
- C++ 堆结构(数组实现)
- 堆排序的数组实现
- 数据结构 二叉堆 数组实现
- C++ 堆结构(数组实现)
- 数组实现的堆操作
- Java用数组实现堆
- C++ 堆结构(数组实现)
- 蓝桥杯乐趣:煤球数目java
- pycharm 注册码/破解
- 在Ubuntu下使用opencv调用海康威视的网络摄像头
- 揭秘2017双11背后的网络-双11的网络产品和技术概览
- windows版influxDB安装与配置
- 堆(数组实现)
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
- 反汇编工具objdump的使用简介
- 在linux中使用rz,sz进行文件的上传和下载,用来代替SRT的sftp功能
- 扫雷小游戏
- 自制简易版手游摇杆
- XTU1165 算术题
- javaweb谈一谈Servlet线程安全问题
- Microsoft Word 2010