一个大顶堆排序问题
程序代码:
程序执行没有错误 但一运行就出错误 希望朋友帮忙看下 谢谢!!! #include<stdio.h> #include<stdlib.h> #define length 6//待排序数个数 int left(int i){//i为插入位置 求i的左孩子 return 2*i; } int right(int i){//右孩子 return 2*i+1; } int parent(int i){//父节点 return i/2; } void swap(int *a,int *b){//交换两个数的值 int temp; temp=*a;*a=*b;*b=temp; } void max_heapify(int a[],int i,int heapsize){//将i位置调整 满足大顶堆的性质 int l=left(i); int r=right(i); int largest,temp; if(l<=heapsize&&a[l]>a[i]) largest=l; else largest=r; if(r<=heapsize&&a[r]>a[largest]) largest=r; if(largest!=i){ swap(&i,&largest); max_heapify(a,largest,heapsize); } } void build_max_heapify(int a[],int heapsize){//建立大顶堆 int i; for(i=length/2;i>=1;i--) max_heapify(a,i,heapsize); } void heapsort(int a[],int heapsize){//堆排序 int i,temp; build_max_heapify(a,heapsize); for(i=heapsize;i>=2;i--){ temp=a[1];a[1]=a[i];a[i]=temp; heapsize--; max_heapify(a,1,heapsize); } } int main(){ int i,a[length]={1,2,3,4,5,6}; int heapsize=length; heapsort(a ,heapsize); for(i=1;i<=length;i++) printf("%d ",a[i]); return 0; }