将一个数组调整为最大堆.
根据堆的性质, 只要保证部分有序即可, 即根节点大于左右节点的值. 将数组抽象为一个完全二叉树, 所以只要从最后一个非叶子节点向前遍历每一个节点即可. 如果当前节点比左右子树节点都大, 则已经是一个最大堆, 否则将当前节点与左右节点较大的一个交换, 并且交换过之后依然要递归的查看子节点是否满足堆的性质, 不满足再往下调整. 如此即可完成数组的堆化.
![](https://img-blog.csdn.net/20161127085050890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码如下:
/*************************************************************************
> File Name: heapify.cpp
> Author: Maoting Ren
> Mail: mren@g.clemson.edu
> Created Time: Sat 26 Nov 2016 05:48:12 PM EST
************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
void adjustHeap(vector<int> &myheap, int k){
int len = myheap.size();
while(k <= len/2-1){
if(myheap[k]>myheap[2*k