将一个数组调整为最大堆.
根据堆的性质, 只要保证部分有序即可, 即根节点大于左右节点的值. 将数组抽象为一个完全二叉树, 所以只要从最后一个非叶子节点向前遍历每一个节点即可. 如果当前节点比左右子树节点都大, 则已经是一个最大堆, 否则将当前节点与左右节点较大的一个交换, 并且交换过之后依然要递归的查看子节点是否满足堆的性质, 不满足再往下调整. 如此即可完成数组的堆化.
代码如下:
/*************************************************************************
> 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