主要内容: 堆、最大堆、最小堆的基本概念 堆的操作:调整、创建、排序 采用堆实现优先级队列 基本概念 堆 ( heap )亦被称为: 优先队列 ( priority queue ) 逻辑定义: n个元素序列{k 1 ,k 2 ...k i ...k n },当且仅当满足下列关系时称之为堆: (k i <= k 2i ,k i <= k 2i+1 )或者(k i >= k 2i ,k i >= k 2i+1 ), (i = 1,2,3,4...n/2) 堆的实现通过构造 二叉堆 (binary heap),实为二叉树的一种。 性质 : 1、任意节点小于或大于它的所有后裔,最小元或最大元在堆的根上( 堆序性 )。将根节点最大的堆叫做 最大堆或大根堆 ,根节点最小的堆叫做 最小堆或小根堆 。常见的堆有二叉堆、斐波那契堆等。 2、堆总是一棵完全树。堆只需要满足父节点大于两个子节点,而子节点之间没有要求。作为一颗完全树,一层中的节点是从左到右填满的。如果一个节点没有左儿子,那么它一定没有右儿子。并且在第h层中如果存在节点,那么第h-1层必须是填满的。 堆的操作 调整堆 void adjust_max_heap_recursive(int *datas, int length, int i)//递归调用,最大堆调整 { int left,right,largest; int temp;