用c ++构建堆

时间:2010-11-15 14:43:11

标签: c++

  

可能重复:
  max_heapify procedure on heap

我正在尝试构建堆 - 这是我的代码:

#include <iostream>
using namespace std;
int parent(int i ){
return  i/2;
}
 int left(int i ){
     return  2*i;

}
int right(int i){
 return 2*i+1;

}
int a[]={4,1,3,2,16,9,10,14,8,7};
int n=sizeof(a)/sizeof(int);
void max_Heapify(int i){
int largest=i;
    int l=left(i);
int r=right(i);
if ( l>=n ||  r>=n){  return ;}
  if(l<n && a[l]>a[i]){
   largest=l;

}
else{
largest=i;
}
if(r< n && a[r]>a[largest]){
  largest=r;

}
  if (largest!=i){
int t=a[i];
a[i]=a[largest];
a[largest]=t;
 max_Heapify(largest);
}

}
int main(){
   for (int i=n/2;i>0;i--){

    max_Heapify(i);
   }
    for (int i=0;i<n;i++){
     cout<<a[i]<<" ";

    }
return 0;
}

但有些事情是错误的,它会异常停止 - 为什么?

0 个答案:

没有答案