#include <iostream> using namespace std; #include <vector> #include <assert.h> //仿函数 template<class T> struct Less { bool operator()(const T& left, const T& right) { return left < right; } }; template<class T> struct Greater { bool operator()(const T& left, const T& right) { return left > right; } }; template<class T, class Compare = Less<T>>//默认为小堆 class Heap { public: Heap() {} Heap(const T* array, size_t size) { for (size_t i = 0; i < size; ++i) { _a.push_back(array[i]); } for (int i = (_a.size()-2)/2; i >= 0; --i) { _AdjustDown(i); } } void Push(const T& x) { _a.push_back(x); _AdjustUp(_a.size()-1); } void Pop() { assert(!_a.empty()); swap(_a[0], _a[_a.size()-1]); _a.pop_back(); _AdjustDown(0); } T& GetTop() { assert(!_a.empty()); return _a[0]; } bool Empty() { return _a.empty(); } size_t Size() { return _a.size(); } void Print() { for (size_t i = 0; i < _a.size(); ++i) { cout<<_a[i]<<" "; } cout<<endl; } protected: //向下调整 void _AdjustDown(size_t parent) { Compare compare; size_t child = parent*2 + 1; while (child < _a.size()) { //比较左右孩子 if (child+1 < _a.size() && compare(_a[child+1], _a[child])) { ++child; } if (compare(_a[child], _a[parent])) { swap(_a[child], _a[parent]); parent = child; child = parent*2 + 1; } else { break; } } } //向上调整 void _AdjustUp(size_t child) { Compare compare; size_t parent = (child-1)/2; while (child > 0) { if (compare(_a[child], _a[parent])) { swap(_a[parent], _a[child]); child = parent; parent = (child-1)/2; } else { break; } } } protected: vector<T> _a; }; void Test() { int a[10] = {10, 11, 13, 12, 16, 18, 15, 17, 14, 19}; Heap<int, Greater<int>> hp1(a, sizeof(a)/sizeof(a[0])); hp1.Print(); cout<<"size:"<<hp1.Size()<<endl; cout<<"top:"<<hp1.GetTop()<<endl; cout<<"empty:"<<hp1.Empty()<<endl; } int main() { Test(); return 0; }目前创新互联已为近千家的企业提供了网站建设、域名、虚拟主机、网站改版维护、企业网站设计、岳阳县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
名称栏目:C++实现堆-创新互联
标题来源:https://www.cdcxhl.com/article20/dddijo.html
成都网站建设公司_创新互联,为您提供服务器托管、外贸网站建设、面包屑导航、外贸建站、网页设计公司、微信小程序
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联