其他分享
首页 > 其他分享> > 第六章 堆排序

第六章 堆排序

作者:互联网

 

 

如图所示,是一个数组,它可以被看成是一棵完全二叉树。树上的每个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组 A 包括两个属性:A.length 数组的大小,A.heapSize 元素个数。这里 0 ≤ A.heapSize ≤ A.length。树的根结点 A[1] ,这样给定一个结点的下标 i,我们很容易计算得到它的父结点 A[i/2]左孩子 A[2*i]右孩子 A[2*i+1]

堆可以分为两种形式:最大堆最小堆。在这两种堆中,结点的值都要满足堆的性质,但一些细节定义有所差异。在最大堆中,除了根以外的所有结点都满足 A[i/2] ≥ A[i] ,也就是说某个结点的值至多与其父结点一样大。因此,堆中的最大元素存放在根结点中;并且,在任意子树中,该子树所包含的所有结点的值都不大于该子树根结点的值。最小堆的组织方式正好相反:除了根以外的所有结点都满足 A[i/2] ≤ A[i] ,最小堆中的最小元素存放在根结点中。

在堆排序算法中,我们使用的是最大堆。最小堆通常用于构造优先队列。

 

维护堆的性质

MaxHeapify 

100

 

标签:结点,元素,堆排序,最小,数组,第六章,堆中
来源: https://www.cnblogs.com/bjxqmy/p/12509905.html