首页 > 其他 > 详细

简洁的heap代码

时间:2014-02-09 22:58:00      阅读:385      评论:0      收藏:0      [点我收藏+]


void MinHeapFixup(int *a,int i){//向上调整
	for(int j=(i-1)/2;(j>=0&&i)&&a[i]<a[j];i=j,j=(i-1)/2)
		swap(a[i],a[j]);
}
void MinHeapAddNumber(int *a,int n,int num){//push_heap
	a[n]=num;
	MinHeapFixup(a,n);
}
void MinHeapFixdown(int *a,int i,int n){//向下调整
	for(int j=2*i+1;j<n;i=j,j=2*i+1){
		if(j+1<n&&a[j+1]<a[j])j++;
		if(a[i]<=a[j])break;
		swap(a[i],a[j]);
	}
}
void MinHeapDeleteNumber(int *a,int n){//pop_heap
	swap(a[0],a[n]);
	MinHeapFixdown(a,0,n);
}
void MakeMinHeap(int *a,int n){//make_heap
	for(int i=n/2-1;i>=0;i--)
		MinHeapFixdown(a,i,n);
}
void MinHeapSort(int *a,int n){//heap_sort
	for(int i=n-1;i>=1;i--){
		swap(a[i],a[0]);
		MinHeapFixdown(a,0,i);
	}
}



简洁的heap代码

原文:http://blog.csdn.net/starcuan/article/details/19016683

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!