建立一个堆结构heap-build

int max_heapify(int *A, int i, int n){
    int left = 2*i;
    int right = 2*i+1;
    int largest = i;

    if( A[ left-1 ] >= A[ i-1 ] && left <= n )
        largest = left;
    if( A[ right-1 ] >= A[ largest-1 ] && right <= n )
        largest = right;
    if( largest != i ){
        int temp = A[ i-1 ];
        A[ i-1 ] = A[ largest-1 ];
        A[ largest-1 ] = temp;
        max_heapify( A, largest, n );
    }
    return 0;
}
int build_heap(int *A, int n){
    int i = n/2;
    for(int j = i; j > 0; j--){
        max_heapify(A, j, n);
    }
    return 0;
}

int test(void){
    int A[] = {4,1,3,2,16,9,10,14,8,7};
    int n = sizeof(A)/ sizeof(int);
    build_heap(A, n);
    for(int i = 0; i < n; i++)
        cout<<"A["<<i<<"] = "<<A[i]<<endl;
    return 0;
}
</pre><pre code_snippet_id="686286" snippet_file_name="blog_20150606_3_3747856" name="code" class="cpp"><pre name="code" class="cpp">//插入元素key,由下而上
void max_insert(vector<int> &A, int i){
    int l = 2*i, r = l+1;
    int max = i; int n = A.size();
    if( A[l-1] > A[max-1] && l <= n)
        max = l;
    if( A[r-1] > A[max-1] && r <= n)
        max = r;
    if( max != i ){
        int temp = A[i-1];
        A[i-1] = A[max-1];
        A[max-1] = temp;
        max_insert(A, i/2);
    }
}

//插入元素key
void insert(vector<int> &T, int key){
    T.push_back(key);
    int i = T.size()/2;
    max_insert(T, i);
}

//在heap中删除第i个元素,将第i个元素与最后一个元素交换,heap的size减1,从第i个元素向下做调整
void delete_heap(vector<int> &T, int i){
    int n = T.size();
    T[i-1] = T[n-1];
    T.pop_back();
    maxify(T, i);
}


 

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值