建立最小堆的下滑算法
2016-08-28 15:22
453 查看
//从节点start开始直到m为止,自上向下比较,如果子女的值小于父节点的值,则
//关键码小的上浮,继续向下层比较。
void siftDown(int *a,int start, int m){ int i = start, j = 2 *i +1; int tmp = a[i]; while(j<=m){ if(j<m && a[j]>a[j+1]) j++; if(tmp <=a[j]) break; else{ a[i] = a[j]; i = j; j = 2*j+1; } } a[i] = tmp; } void minHeap(int *a, int len){ int currentSize = len; int currentPos = (currentSize-2) / 2; while(currentPos>=0){ siftDown(a, currentPos,currentSize-1); currentPos--; } }
<pre name="code" class="cpp">int main(){ int i,j; int a[] = {53,17,78,9,45,65,87,23}; int len = sizeof(a) / sizeof(int); minHeap(a, len); for(i = 0; i < len; i++){ cout<<a[i]<<" "; } cout<<endl;
return 0;
}
相关文章推荐
- [置顶] 宜信技术研发中心暑假实习总结
- 0827模拟赛解题报告(16年暑假最后一次模拟赛)
- 控制反转
- 2017年爱奇艺校招模拟笔试编程
- Linux下访问MySQL的数据库权限不够的问题
- Ext.js项目(一)
- 数据库原理-几种数据模型
- 创建链表并插入数据(有序)
- Eventbus3.0的基本使用以及在企业中如何EventBus
- Chess
- Python3中urllib详细使用方法(header,代理,超时,认证,异常处理)
- elastic-job 构建
- Android ADB(二)
- 在HQL select查询语句中自定义查询结果返回的数据类型
- linux学习心得
- Hibernate入门案例及增删改查
- 《Microsoft SQL Server 2008 Analysis Services Step By Step》学习笔记
- 认识Fragment
- C++进阶之浅谈typedef
- swift中反向循环