我正在尝试构建堆 - 这是我的代码:
#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;
}
但有些事情是错误的,它会异常停止 - 为什么?