堆排序

  

【堆的定义】

 堆是完全二叉树。

堆满足二个特性:

1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。

2.每个结点的左子树和右子树都是一个二叉堆。

当父结点的键值总是大于或等于任何一个子节点的键值时为大根堆。

 

堆的逻辑结构:完全二叉树

堆的存储结构:数组

 

下面举例说明:

给定一个整形数组a[]={16,7,3,20,17,8}

首先根据该数组元素构建一个完全二叉树,得到

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

 

队列

queue<int> Q; 

队首元素

Q.front()

 

优先队列

priority_queue<int,vector<int>,greater<int> > Q;    //小根堆

队首元素

Q.top()

 

posted @ 2024-05-27 18:29  qilinart  阅读(24)  评论(0)    收藏  举报