【数据结构】二叉堆与左偏树

来源:互联网 发布:淘宝买进口保健品 编辑:程序博客网 时间:2024/06/15 03:16
// 二叉堆void up( int i ){    int dad = i >> 1, data = heap[i];    while( dad != 0 && heap[dad] > data )    {        heap[i] = heap[dad];        i = dad;        dad = i >> 1;    }    heap[i] = data;}void down( int i ){    int son = i << 1, data = heap[i];    while( son <= sum )    {        if( son < sum && heap[son] > heap[son+1] ) son++;        if( heap[son] >= data ) break;        heap[i] = heap[son];        i = son;        son = i << 1;    }    heap[i] = data;}


// 左偏树int merge( int aa, int bb ){    if( !aa ) return bb;    if( !bb ) return aa;    if( key[aa] > key[bb] ) swap( aa, bb );    rt[aa] = merge( rt[aa], bb );    if( dis[ rt[aa] ] > dis[ lt[aa] ] ) swap( rt[aa], lt[aa] );    if( !rt[aa] ) dis[aa] = 0; else dis[aa] = dis[ rt[aa] ] + 1;    return a;}

原创粉丝点击