建立最小堆的下滑算法

来源:互联网 发布:淘宝子账号在哪关闭 编辑:程序博客网 时间:2024/05/16 15:27
//从节点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