您的位置:首页 > 其它

算法导论,堆排序,c实现。

2015-01-12 12:47 323 查看
//只是建堆
#include<stdio.h>
#include<stdlib.h>

int heapmax(int A[],int i,int length);
int heapsort(int A[],int length);
int main(void)
{
int A[10]={4,1,3,2,16,9,10,14,8,7};
int length=sizeof(A)/sizeof(int);

heapsort(A,length);

int i;
for(i=0;i<10;i++)
printf("%d\n",A[i]);
//printf("kkkkkkkkk%d\n",kkk);
return 0;
}
int heapmax(int A[],int i,int length)//假设节点i的左右子树都是最大堆
{
//int ob=i;printf("%d\n",ob);
int l=2*i+1;//printf("%d\n",l);
int r=2*i+2;
int key=0;
//int kkkk;
//printf("%d-----%d----%d----%d\n",i,l,r,key);
//int yyy=length;
puts("Hola?");
//int length=sizeof(A)/sizeof(int);
printf("%d~~~~\n",length);
if(A[i]<A[l]&&l<length)
key=l;
else
key=i;
if(A[r]>A[key]&&r<length)
key=r;
if(key!=i)
{
int kkkk;
kkkk=A[i];
A[i]=A[key];
A[key]=kkkk;
heapmax(A,key,length);
}
}
int heapsort(int A[],int length)
{
//length[A]=10;
int i;
for(i=(length-1)/2;i>=0;i--)
heapmax(A,i,length);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论 堆排序 c