//只是建堆
#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实现。
最新推荐文章于 2022-02-23 15:02:25 发布