您的位置:首页 > 其它

关于堆和堆排序

2013-09-17 22:40 162 查看
数据结构的的原理及实现,这里讲的很好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);        //但对这一句没用,排序结果总是升序的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: