堆的实现例程
2016-05-11 18:51
253 查看
#define MAX_HEAP_LEN 100 static int heap[MAX_HEAP_LEN]; static int heap_size = 0; ///堆中的元素个数 static void swap (int *a,int *b) { int temp=*a; *a=*b; *b=temp; } static void percolate_up(int i) { ///向上调整 if(i==0) return ; ///节点i已经是根节点了 int done=0; while((i!=0)&&(!done)) { if(heap[i]>heap[(i-1)/2]) { swap(&heap[i],&heap[(i-1)/2]); } else { done =1; } i=(i-1)/2; } } static void percolate_down(int i) { ///向下调整 if(2*i+1>heap_size) return ; ///节点i是叶子节点 int done=0; while((2*i+1<heap_size)&&(!done)) { i=i*2+1; ///跳转到左孩子 if((i+1<heap_size)&&(heap[i+1]>heap[i])) { ///在这两个孩子中找到较大者 i++; } if(heap[(i-1)/2]<heap[i]) { swap(&heap[(i-1)/2],&heap[i]); } else { done = 1; } } } static void delete (int i) { int last = heap[heap_size-1]; ///获取最后一个 heap_size--; ///收缩堆 if(i==heap_size) return ; heap[i]=last; ///用最后的节点覆盖当前的 percolate_down(i); } int delete_max() { int ret = heap[0]; delete(0); return ret; } void insert (int new_data) { if(heap_size>=MAX_HEAP_LEN) return; heap_size++; heap[heap_size-1]=new_data; percolate_up(heap_size-1); } void build () { ///建堆算法 for(int i=heap_size/2; i>0; i--) percolate_down(i); }
View Code
相关文章推荐
- wins安装Java
- 位运算及其应用详解
- 一个关于if语句的小问题
- socket(TCP)
- nyoj 228 士兵杀敌(五)
- C++对象的内存分布和虚函数表
- 代码删除项目里面所有.svn和.git 文件
- 错误 1error LNK1207 PDB 格式不兼容;请删除并重新生成
- UIGesture
- HDOJ 1042 N!
- nefu26(求数的位数)
- 探索 Swift 中的 MVC-N 模式
- LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)
- HDU4165 (卡特兰数列) Pills(简单期望DP)
- java home 配置
- n!后面有多少个0
- Spring MVC+Maven+Freemarker+Mybatis开发环境搭建
- 模拟实现通讯录-静态的方法
- 大数据Java基础第七天作业
- Swift 3.0 预告:将 Objc 库转换成更符合 Swift 语法风格的形式