关闭

建立最小堆的下滑算法

116人阅读 评论(0) 收藏 举报
分类:
//从节点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;
}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34777次
    • 积分:2050
    • 等级:
    • 排名:第18708名
    • 原创:170篇
    • 转载:30篇
    • 译文:7篇
    • 评论:2条
    最新评论