第六章 堆排序
作者:互联网
堆
如图所示,堆是一个数组,它可以被看成是一棵完全二叉树。树上的每个结点对应数组中的一个元素。除了最底层外,该树是完全充满的,而且是从左向右填充。表示堆的数组 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