建立最小堆的下滑算法

原创 2016年08月28日 15:22:12
//从节点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;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构与算法之最小堆的建立

算法思路:二叉堆各节点用数组标示是线性的,父节点与其左孩子的索引关系:leftchild=2*parient+1; 当高层数值较大的节点往下移动时,移动后还要判断该节点数值与左右孩子节点的大小关系,...
  • Weirenren_027
  • Weirenren_027
  • 2012年11月21日 21:19
  • 3260

堆排序(最小堆)--【算法导论】

堆排序的思想在堆排序(最大堆)已做说明,故不再赘述; 总之,思想就是首先进行建堆,由于这是最小堆,故而必须保证父节点都小于孩子节点,若不满足条件,则进行调节; 最后进行堆排序,不断将最小的提取出来...
  • xjm199
  • xjm199
  • 2014年01月08日 21:39
  • 4489

最小堆问题

最小堆的概念:所有父节点的值小于或等于两子节点的值,并且它所有元素按完全二叉树的顺序存储方式存放在一个一维数组中。 如图: 关于堆的操作: 1.建立最小堆:将普通数组转换成堆,转...
  • GHX05130319
  • GHX05130319
  • 2015年03月28日 17:16
  • 553

最详细的最小堆构建、插入、删除的过程图解

转载:http://blog.csdn.net/hrn1216/article/details/51465270 1.简介        最小堆是一棵完全二叉树,非叶子结点的值不大...
  • u011068702
  • u011068702
  • 2016年09月30日 17:22
  • 8454

最小堆最大堆的详细解读

2013-09-13 16:36 16408人阅读 评论(1) 收藏 举报 本文章已收录于: 版权声明:本文为博主原创文章,未经博主允许不得转载。 转自:码农下的天桥 ...
  • qwezhaohaihong
  • qwezhaohaihong
  • 2016年04月03日 16:17
  • 5722

最小堆建立

题目来源:http://dsalgo.openjudge.cn/201409week5/2/最小堆建立题目:实现最小堆两个功能: 1、增加一个元素 2、输出并删除最小堆中的最小的数 输入: ...
  • GreenTeak
  • GreenTeak
  • 2016年03月07日 22:49
  • 682

最小堆怎么建立

有一个面试题,100w个数中找到最大的100个数。 解决方式是,用一个100个容量的最小堆, 这100个数总数目前已知的最大的100个,而且 堆顶是小的, 在继续遍历时候,只和堆定比较, 如果这个...
  • u012063703
  • u012063703
  • 2015年09月17日 17:47
  • 781

python 算法实现 - 最小堆

最近浅学python,甚感方便,准备用python实现一遍常用的算法。 class MinHeap: def __init__(self): self.list = [0] self.si...
  • Desilting
  • Desilting
  • 2015年04月09日 18:07
  • 2142

最小堆的建立

最小堆的建立
  • cckevincyh
  • cckevincyh
  • 2015年06月05日 17:15
  • 1225

Java最小堆实现

package boke.heap1;      /**   * 堆结点   *    * @since jdk1.5及其以上   * @author 毛正吉   * @version ...
  • li_zhenxing
  • li_zhenxing
  • 2014年06月02日 22:14
  • 1546
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:建立最小堆的下滑算法
举报原因:
原因补充:

(最多只允许输入30个字)