關於堆和堆排序

數據結構的的原理及實現,這裏講的很好http://blog.csdn.net/morewindows/article/details/6709644

而關於STL中的堆的使用Morewindows講的也不錯http://blog.csdn.net/morewindows/article/details/6967409

但是其中存在幾個小問題:


1.vector<int> *pvet = new vector<int>(40);

    沒有必要申請40的空間,20足矣。


2.int a[MAXN];pvet->assign(a, a + MAXN);會將空間設置回20,看來assign函數還是挺厲害的。


3.如果需要小根堆,則需要自己寫函數

bool cmp(int a,int b)
{
 return a>b;
}

make_heap(pvet->begin(), pvet->end(),cmp);    //之後每次使用都需要加入cmp否則運行時錯誤


pvet->push_back(25);
push_heap(pvet->begin(), pvet->end(),cmp);


pop_heap(pvet->begin(), pvet->end(),cmp);
pvet->pop_back();


sort_heap(pvet->begin(), pvet->end(),cmp);        //但對這一句沒用,排序結果總是升序的。

發佈了23 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章