一个大顶堆排序问题
程序代码:程序执行没有错误 但一运行就出错误 希望朋友帮忙看下 谢谢!!!
#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;
}









