文章目录
堆
将堆看做一种完全二叉树。可以用数组的方式存储。
性质
大根堆:对于所有结点而言,除根结点以外,所有结点的值都不超过其父结点的值;(即堆中的最大元素存放在根节点中,每一结点子树中的结点值都小于等于该结点的值;) 小根堆反之;
根的建立过程
根元素的删除过程
仅仅是实现过程不一样,其他没什么差别
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100;
int heap[MAXN], siz;//siz为当前堆的大小
//在堆的末尾先加入一个数,比较这个数同他父亲的大小关系(假设其为小根堆),如果这个数小于父亲,就交换该数与其父亲,不断递归直到根节点
void insert(int x) {
heap[++siz] = x;//从1开始编号
int pos = siz;
while (pos != 1) {
//不断向上递归
if (heap[pos] >= heap[pos / 2])