大顶堆实现(未果),朋友来看看
程序代码:
下面是实现大顶堆的一个简单程序,多方调试得不到正确结果,请朋友帮忙看下 #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; }