堆排序
来源:互联网 发布:股票套牢知乎 编辑:程序博客网 时间:2024/05/22 00:46
一、.什么是堆?
堆首先是一个完全二叉树,每个根节点的值大于等于(小于等于)左右子节点的值,
一般通过宏定义完成I节点的父节点,
- #define PARENT(i) (i) >> 1
- #define LEFT(i) (i) << 1
- #define RIGHT(i) ((i) << 1) + 1
二、堆的基本操作
1.MAXHEAPIFY指的是维护最最大堆。
2.BUIDMAXHEAP指的是建立一个最大堆
3.HEAPSORT指的是堆排序过程。
三。如何维护一个最大堆
先假设以一个节点的左右两个子节点的二叉树为最大堆,则
c++代码实现:
四、如何建立一个最大堆
首先,一个数组是不一定满足堆的特性的,所以需要建立最大堆。建立最大堆的过程其实就是从N/2开始不断的维护最大堆的过程
C++代码实现:
五、堆排序
C++代码实现:
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Spring Boot自动生成模板和Spring Boot CLI安装使用
- 《自己手动写一个编译器、连接器》一(2)
- 怎么在新浪云上发布自己的本地项目(不涉及数据库的)
- 【思维】黄金圈思维法则
- 获取不同精度的时间
- 堆排序
- SpringBoot下如何配置实现跨域请求?
- C# 中的委托和事件(1)
- Ubuntu下使用c++ json库
- NOI2015 航空管制
- 第一篇博客——关于C++中引用的笔记
- C#中的委托和事件(2)
- Sticky footers布局
- Android疑难 —隐式Intent匹配原则、Android Studio Clean and Rerun、LayoutInflater、Context