堆排序

【堆的定义】
堆是完全二叉树。
堆满足二个特性:
1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
2.每个结点的左子树和右子树都是一个二叉堆。
当父结点的键值总是大于或等于任何一个子节点的键值时为大根堆。
堆的逻辑结构:完全二叉树
堆的存储结构:数组
下面举例说明:
给定一个整形数组a[]={16,7,3,20,17,8}
首先根据该数组元素构建一个完全二叉树,得到

然后构造堆,从最后一个非叶节点开始调整,调整过程如下:

队列
queue<int> Q;
队首元素
Q.front()
优先队列
priority_queue<int,vector<int>,greater<int> > Q; //小根堆
队首元素
Q.top()

浙公网安备 33010602011771号