您的位置:首页 > 其它

堆排序(算法导论)

2014-08-29 16:53 330 查看
#include<stdio.h>
#include<math.h>
#define OK 1
int build_max_heap(int[],int);
int main(){
int A[]={4,1,3,2,16,9,10,14,8,7};
int length=10;
//build_max_heap(A,length);
heap_sort(A,length);
int i;
for(i=0;i<length;i++)
printf("%d ",A[i]);
printf("\n");
return 0;
}

int max_heapify(int A[],int i,int length){
int heap_size=length;
int l=2*i+1;
int r=2*i+2;
int largest;
if(l<=heap_size && A[l] > A[i])
largest=l;
else
largest=i;

if(r<=heap_size && A[r] > A[largest])
largest=r;

if(largest != i){
int temp=A[largest];
A[largest] = A[i];
A[i] =temp;
max_heapify(A,largest,heap_size);
}
return OK;
}

int  build_max_heap(int A[],int length){
int i;
for(i=(int)floor((length-1)/2);i>=0;i--)
max_heapify(A,i,length);

return OK;
}

int heap_sort(int A[],int length){
build_max_heap(A,length);
int heap_size=length-1;
int i;
for(i=length-1; i >=1;i--){
heap_size-=1;

int temp=A[0];
A[0]=A[i];
A[i]=temp;

max_heapify(A,0,heap_size);
}
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: