给出一个整数数组,堆化操作就是把它变成一个最小堆数组。
对于堆数组A,A[0]是堆的根,并对于每个A[i],A [i * 2 + 1]是A[i]的左儿子并且A[i * 2 + 2]是A[i]的右儿子。
class Solution {
public:
/*
* @param A: Given an integer array
* @return: nothing
*/
void heapify(vector<int> &A) {
// write your code here
if(A.empty())
return;
int len=A.size();
for(int i=len/2;i>=0;i--){
minheapify(A,i,len);
}
}
void minheapify(vector<int> &A,int i,int len){
int left=2*i+1;
int right=2*i+2;
int minindex=i;
if(left<len&&A[left]<A[i])
minindex=left;
if(right<len&&A[right]<A[minindex])
minindex=right;
if(minindex!=i){
swap(A[i],A[minindex]);
minheapify(A,minindex,len);
}
}
};