Given an integer array, heapify it into a min-heap array.
For a heap array A, A[0] is the root of heap, and for each A[i], A[i * 2 + 1] is the left child of A[i] and A[i * 2 + 2] is the right child of A[i].
Example
Given [3,2,1,4,5], return [1,2,3,4,5] or any legal heap array.
class Solution {
public:
void heapify(vector<int> &num)
{
int len = num.size();
int start = (len-2)/2;
while(start >= 0)
{
int root = start;
while(2*root+1 < len)
{
int swap = root;
int left = 2*root + 1;
int right = left + 1;
if(num[swap]>num[left]) swap = left;
if(right<len&&num[right]<num[swap]) swap = right;
if(swap == root) break;
int tmp = num[swap];
num[swap] = num[root];
num[root] = tmp;
root = swap;
}
start --;
}
}
};