|
常用链接
留言簿(4)
随笔分类
随笔档案
搜索
最新评论
阅读排行榜
评论排行榜
Powered by: 博客园
模板提供:沪江博客
|
|
|
|
|
发新文章 |
|
|
STL堆排序其实就是 创建一个二叉树,下面是几个常用函数的使用方法和代表的意思 #include #include #include #include using namespace std;
(1)创建一个数组,并添加数据 vector v_Arry; v_Arry.push_back(5); v_Arry.push_back(6); v_Arry.push_back(4); v_Arry.push_back(8); v_Arry.push_back(2); v_Arry.push_back(3); v_Arry.push_back(7); v_Arry.push_back(1); v_Arry.push_back(9); v_Arry.push_back(10); v_Arry.push_back(55);
(2)make_heap(v_Arry.begin(), v_Arry.end(), less()) //建堆(其实就是建二叉树),根节点是最大值,其每一个节点都小于或等于其父节点;使用greater()则相反,根节点是最小值,其每一个节点都大于或等于其父节点
(3)此时可以输出查看一下建好的堆是不是一个标准的二叉树 我的输出结果是:55,10,7,9,6,3,4,1,8,5,2 变成二叉树就是如下:
<!--[if !vml]--><!--[endif]-->
<!--[if !vml]--><!--[endif]-->
结果不是唯一单一定要满足父节点和子节点的大小关系。 (4)pop_heap(v_Arry.begin(), v_Arry.end());//把根节点移到末尾,并没有删除 v_Arry.pop_back();//删除该节点 此时输出结果:10,9,7,8,6,3,4,1,2,5 二叉树如下:
(5)v_Arry.push_back(55); //只是添加数据放到子节点 push_heap(v_Arry.begin(), v_Arry.end());//往二叉树中插入数据,满足子节点小于等于父节点 此时输出结果:55,10,7,8,9,3,4,1,2,5,6 二叉树如下:
(6)sort_heap(v_Arry.begin(), v_Arry.end());//对二叉树所有节点进行排序 此时输出结果:1,2,3,4,5,6,7,8,9,10,55
(7)find ( v_Arry.begin(), v_Arry.end(), value );// 从begin到end查找value,若找不到,返回end
原文地址:http://blog.zol.com.cn/1356/article_1355249.html
|
|