int max_heapify(int *A, int i, int n){
int left = 2*i;
int right = 2*i+1;
int largest = i;
if( A[ left-1 ] >= A[ i-1 ] && left <= n )
largest = left;
if( A[ right-1 ] >= A[ largest-1 ] && right <= n )
largest = right;
if( largest != i ){
int temp = A[ i-1 ];
A[ i-1 ] = A[ largest-1 ];
A[ largest-1 ] = temp;
max_heapify( A, largest, n );
}
return 0;
}
int build_heap(int *A, int n){
int i = n/2;
for(int j = i; j > 0; j--){
max_heapify(A, j, n);
}
return 0;
}
int test(void){
int A[] = {4,1,3,2,16,9,10,14,8,7};
int n = sizeof(A)/ sizeof(int);
build_heap(A, n);
for(int i = 0; i < n; i++)
cout<<"A["<<i<<"] = "<<A[i]<<endl;
return 0;
}
</pre><pre code_snippet_id="686286" snippet_file_name="blog_20150606_3_3747856" name="code" class="cpp"><pre name="code" class="cpp">//插入元素key,由下而上
void max_insert(vector<int> &A, int i){
int l = 2*i, r = l+1;
int max = i; int n = A.size();
if( A[l-1] > A[max-1] && l <= n)
max = l;
if( A[r-1] > A[max-1] && r <= n)
max = r;
if( max != i ){
int temp = A[i-1];
A[i-1] = A[max-1];
A[max-1] = temp;
max_insert(A, i/2);
}
}
//插入元素key
void insert(vector<int> &T, int key){
T.push_back(key);
int i = T.size()/2;
max_insert(T, i);
}
//在heap中删除第i个元素,将第i个元素与最后一个元素交换,heap的size减1,从第i个元素向下做调整
void delete_heap(vector<int> &T, int i){
int n = T.size();
T[i-1] = T[n-1];
T.pop_back();
maxify(T, i);
}