zoukankan      html  css  js  c++  java
  • 堆的实现例程

    #define MAX_HEAP_LEN 100
    static int heap[MAX_HEAP_LEN];
    static int heap_size = 0;   ///堆中的元素个数
    
    static void swap (int *a,int *b) {
        int temp=*a;
        *a=*b;
        *b=temp;
    }
    
    static void percolate_up(int i) {
        ///向上调整
        if(i==0) return ;   ///节点i已经是根节点了
        int done=0;
        while((i!=0)&&(!done)) {
            if(heap[i]>heap[(i-1)/2]) {
                swap(&heap[i],&heap[(i-1)/2]);
            } else {
                done =1;
            }
            i=(i-1)/2;
        }
    }
    
    static void percolate_down(int i) {
        ///向下调整
        if(2*i+1>heap_size) return ;    ///节点i是叶子节点
    
        int done=0;
        while((2*i+1<heap_size)&&(!done)) {
            i=i*2+1;    ///跳转到左孩子
            if((i+1<heap_size)&&(heap[i+1]>heap[i])) {
                ///在这两个孩子中找到较大者
                i++;
            }
            if(heap[(i-1)/2]<heap[i]) {
                swap(&heap[(i-1)/2],&heap[i]);
            } else {
                done = 1;
            }
        }
    }
    
    static void delete (int i) {
        int last = heap[heap_size-1];   ///获取最后一个
        heap_size--;                    ///收缩堆
        if(i==heap_size) return ;
    
        heap[i]=last;                   ///用最后的节点覆盖当前的
        percolate_down(i);
    
    }
    
    int delete_max() {
        int ret = heap[0];
        delete(0);
        return ret;
    }
    
    void insert (int new_data) {
        if(heap_size>=MAX_HEAP_LEN) return;
        heap_size++;
        heap[heap_size-1]=new_data;
        percolate_up(heap_size-1);
    }
    
    void build () {
        ///建堆算法
        for(int i=heap_size/2; i>0; i--)
            percolate_down(i);
    }
    View Code
  • 相关阅读:
    我查询的问题点
    更改hosts操作
    日常有用的网站
    加入到java后台开发
    知识点收藏
    Mac操作技巧
    设置自己的APP能打开文件(在其他应用中打开显示自己的应用)
    思维不要留在框里
    X RMAN Crosscheck后delete obsolete遇到RMAN-06091的解决
    X No standby redo logfiles created for thread 1
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5483204.html
Copyright © 2011-2022 走看看