堆排序

来源:互联网 发布:股票套牢知乎 编辑:程序博客网 时间:2024/05/22 00:46

一、.什么是堆?

堆首先是一个完全二叉树,每个根节点的值大于等于(小于等于)左右子节点的值,

一般通过宏定义完成I节点的父节点,

  1. #define PARENT(i) (i) >> 1  
  2. #define LEFT(i) (i) << 1  
  3. #define RIGHT(i) ((i) << 1) + 1 

二、堆的基本操作

1.MAXHEAPIFY指的是维护最最大堆。

2.BUIDMAXHEAP指的是建立一个最大堆

3.HEAPSORT指的是堆排序过程。

三。如何维护一个最大堆

先假设以一个节点的左右两个子节点的二叉树为最大堆,则

c++代码实现:


四、如何建立一个最大堆

首先,一个数组是不一定满足堆的特性的,所以需要建立最大堆。建立最大堆的过程其实就是从N/2开始不断的维护最大堆的过程

C++代码实现:


五、堆排序

C++代码实现:


原创粉丝点击