您的位置:首页 > 其它

建立最小堆的下滑算法

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;

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: