1.第一个元素总是最大;
2.总是能够在对数时间内增加或移除一个元素。op是一个可有可无的二元判断式,被视为排序准则:
op(elem1,elem2)调用者必须保证,进入函数时,区间[beg,end-1)内的元素原本便已形成一个heap(在相同的排序准则下),而新元素紧跟其后;
复杂度:对数op是个可有可无的二元判断,被当作排序准则:
op(elem1,elem2)调用者必须保证,进入函数时,区间[beg,end)内的元素原本便已形成一个heap(在相同的排序准则下);
复杂度:对数;op是个可有可无的二元判断式,被视为排序准则:
op(elem1,elem2)注意,此算法一旦结束,该区间就不再是heap了;
调用者必须保证,进入函数时,区间[beg,end)内的元素原本便已形成一个heap(在相同的排序准则下);
复杂度:nlogn
代码示例:
//haep #include"fuzhu.h" using namespace std; int main() { vector<int> coll; INSERT_ELEMENTS(coll,3,7); INSERT_ELEMENTS(coll,5,9); INSERT_ELEMENTS(coll,1,4); PRINT_ELEMENTS(coll,"on entry: \n"); make_heap(coll.begin(),coll.end()); PRINT_ELEMENTS(coll,"after make_heap(): \n"); pop_heap(coll.begin(),coll.end()); coll.pop_back(); PRINT_ELEMENTS(coll,"after pop_heap(): \n"); coll.push_back(17); push_heap(coll.begin(),coll.end()); PRINT_ELEMENTS(coll,"after push_heap(): \n"); sort_heap(coll.begin(),coll.end()); PRINT_ELEMENTS(coll,"after sort_heap(): \n"); system("pause"); return 0; }