//最大二叉堆实际上就是一个顺序数组,这个数组遵循这样的规律:若将数组按顺序写成二叉树的形式,则除根节点外,树中节点不大于其父节点#include "stdafx.h"//二叉堆的建立//先将输入序列排序成二叉堆的形式template<class T>
void max_heapify(vector<T>& vec,int i,int heap_size)
{int l=2*i;int r=2*i+1;int largest;if(l<=heap_size-1&&vec[l]>vec[i])largest=l;elselargest=i;if(r<=heap_size-1&&vec[r]>vec[largest])largest=r;if(largest!=i){swap(vec[i],vec[largest]);max_heapify(vec,largest,heap_size);}
}template<class T>
void build_max_heap(vector<T>& vec)
{int heap_size=vec.size();for(int i=vec.size()/2-1;i>=0;--i){max_heapify(vec,i,heap_size);}
}template<class T>
void heap_sort(vector<T>& vec)
{int heap_size=vec.size();build_max_heap(vec);for(int i=vec.size()-1;i>=1;--i){swap(vec[i],vec[0]);--heap_size;max_heapify(vec,0,heap_size);}
}int main()
{vector<int> ivec;for(int i=0;i<10;++i){int n=rand()%10;ivec.push_back(n);     }cout<<"before sort"<<endl;for(vector<int>::iterator iter=begin(ivec);iter!=end(ivec);++iter){cout<<*iter<<" ";}cout<<endl;build_max_heap(ivec);cout<<"after heapify"<<endl;for(vector<int>::iterator iter=begin(ivec);iter!=end(ivec);++iter){cout<<*iter<<" ";}cout<<endl;heap_sort(ivec);cout<<"after heap_sort"<<endl;for(vector<int>::iterator iter=begin(ivec);iter!=end(ivec);++iter){cout<<*iter<<" ";}cout<<endl;
}


												

最大二叉堆的建立以及最大堆排序相关推荐

  1. 二叉堆(彻底整明白堆排序)

    数据结构与算法笔记 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博主的数据结构与算法的代码笔记 前言:之前写过堆排序,因为对堆数据结构还是不够了解,懵懵逼逼的写 ...

  2. 【数据结构与算法】二叉堆V2.0的Java实现

    更新说明 我们在此前已经编写过简单版的二叉大根堆V1.0,这次,换成二叉小根堆,命名为二叉堆V2.0. 大家也知道,堆是完全二叉树,存储方式借助动态数组实现顺序存储,依赖于父子结点之间的index关系 ...

  3. 二叉堆简单实现与应用

    从二叉树谈二叉堆: 二叉树可以简单认为是父节点最多由左.右两个子节点组成的树,常用的二叉树有完全二叉树.二叉搜索树.二叉搜索树在极端境况下存在"跛脚"的问题,由此又有了二叉平衡树. ...

  4. 基于动态数组建立二叉堆、批量建堆-JAVA

    文章目录 1.堆的数据结构 2.添加 3.删除 4.代码实现 1.首先定义接口 2.写实现类 5.如何批量建堆 1.堆的数据结构 如果任意节点的值总是≥子节点的值,称为:最大堆.大根堆.大顶堆 如果任 ...

  5. 在A*寻路中使用二叉堆

    在A*寻路中使用二叉堆 作者:Patrick Lester(2003年4月11日更新) 译者:Panic 2005年3月28日 译者序:     这一篇文章,是"A* Pathfinding ...

  6. 0x17.基础数据结构 - 二叉堆

    目录 一.二叉堆 二.例题 0.AcWing 145. 超市 AcWing 146. 序列(POJ 2442) 三.HuffmanHuffmanHuffman树 1.AcWing 148. 合并果子 ...

  7. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  8. 数据结构之优先队列--二叉堆(Java实现)

    前言 数据结构队列的学习中,我们知道队列是先进先出的.任务被提交到队列中,按照先进先出的原则 对各个任务进行处理.不过在现实的情况下,任务通常有着优先级的概念,例如短任务.管理员的操作 应该优先执行. ...

  9. 构建二叉堆时间复杂度的证明

    http://blog.csdn.net/linuxtiger/article/details/7172258 如果仅从代码上直观观察,会得出构造二叉堆的时间复杂度为O(n㏒n)的结果,这个结果是错的 ...

最新文章

  1. 试读angular源码第三章:初始化zone
  2. jquery键盘事件
  3. 织梦二次开发写php,PHP教程—DedeCMS二次开发(二)
  4. 同步器之Exchanger
  5. linux的自定义input,linux键值到Android键值的转换与自定义
  6. php的验证码要gd库,PHP通过GD库实现验证码功能
  7. table合并单元格_element ui el-table 合并单元格
  8. mysql事务操作代码_Mysql中事务的使用【mysql】
  9. vue-resource中文文档
  10. 价格穿越,跟 普通的大于 小于是有差别的
  11. WPF编程基础入门 ——— 第三章 布局(四)布局面板StackPanel
  12. 如何设置Mosek的最大迭代次数?
  13. 联想t450进入bios设置按哪个键_联想台式机怎么进入bios|联想台式电脑按什么键进bios设置...
  14. java多态怎么学_Java学习笔记---多态
  15. C语言阶段小项目(火车购票系统)
  16. 这样的男人有几个;1.会为你哭的男人2.喜欢欺负你的男人3.会主动亲你的男人4.喜欢叫你傻瓜
  17. opencv打开摄像头失败的一种可能cv2.error: Unknown C++ exception from OpenCV code
  18. 新团队成员之间破冰训练
  19. 拓维信息鸿蒙服务器,润和软件、常山北明、诚迈科技、拓维信息,谁是华为鸿蒙真龙头?...
  20. 黑客攻防技术宝典(十八)

热门文章

  1. 使用Python+yolov3实现对帧数不等长视频进行批处理
  2. vue+element-ui+富文本————图片上传
  3. jsp页面div浮动弹出
  4. python查找某一目录下的前缀相同的文件并移动到指定目录, 目录下会有不同前缀的文件, 不同前缀的文件移动到不同目录 举个例...
  5. Java游戏 斗地主
  6. Windows脚本中等待几秒的替代方法
  7. 一个简单网页游戏--丑陋的连连看
  8. 使用chrome下载youtbe视频
  9. JS 数组转对象,JS 对象转数组
  10. 2022-1-14牛客C++项目 —— 第二章 Linux多线程编程(gdb多进程调试)