大顶堆实现(未果),朋友来看看
程序代码:下面是实现大顶堆的一个简单程序,多方调试得不到正确结果,请朋友帮忙看下
#include<stdio.h>
#include<stdlib.h>
const int heapsize=10;
int parent(int i){
return i/2;
}
int left(int i){
return 2*i;
}
int right(int i){
return 2*i+1;
}
void Max_Heapify(int a[],int i,int length){//调整位置i处,使其满足大顶堆的性质
/*if(i>heapsize/2)//输入异常处理
return;*/
int l,r,largest=i;
l=left(i);//2*i;
r=right(i);;//2*i+1
if(l<=length&&a[l-1]>a[i-1])
largest=l;
else
largest=i;
if(r<=length&&a[r-1]>a[largest-1])
largest=r;
if(largest!=i){
int temp=a[i-1];a[i-1]=a[largest-1];a[largest-1]=a[i-1];
Max_Heapify(a,largest,length);
}
}
void Build_Max_Heap(int a[],int length){
for(int i=parent(length);i>=1;i--)
Max_Heapify(a,i,length);
}
int main(){
int a[heapsize]={0,1,2,3,4,5,6,7,8,9};
/*for(int j=0;j<n;j++)
printf("%d ",pt[j]);*/
Build_Max_Heap(a,heapsize);//根据以上输入数据建立大顶堆
for(int j=0;j<heapsize;j++)
printf("%d ",a[j]);
return 0;
}







自己先顶个,虽是小问题,却蕴含大哲理,大智慧,麻烦帮忙则个!!



原来是这个问题,我都崩溃了,好久没写程序了,谢了,哥们