堆排序的核心就是如何建堆以及如何保持堆的性质,而建堆也是利用保持堆的性质来实现的,因此最核心的就是如何保持堆的性质,以大根堆为例说明:
大根堆必须满足如下性质:
1.每个结点的值都不小于它的左右子树根节点的值
2.是一个完全二叉树
首先来看,如何保持大根堆的性质?
我们使用 MaxHeapify (int array[], int length, int root)函数来实现,关键思想是:在调用本函数之前,假设root的子女left[root]和right[root]
堆排序的核心就是如何建堆以及如何保持堆的性质,而建堆也是利用保持堆的性质来实现的,因此最核心的就是如何保持堆的性质,以大根堆为例说明:
大根堆必须满足如下性质:
1.每个结点的值都不小于它的左右子树根节点的值
2.是一个完全二叉树
首先来看,如何保持大根堆的性质?
我们使用 MaxHeapify (int array[], int length, int root)函数来实现,关键思想是:在调用本函数之前,假设root的子女left[root]和right[root]