2007年4月9日星期一

随手用c写了个HeapSort,不知是我BT,还是cBT……

#include <stdio.h>

long a[100];
long hs,n,i;
FILE *fin,*fout;

void swap(long *a,long *b){long t;t=*a;*a=*b;*b=t;}

void heapify(long i)
{
long l=i<<1,r=l+1,g=i;
if(l<=hs && *(a+l)>*(a+i))g= l;
if(r<=hs && *(a+r)>*(a+g))g= r;
if (g != i){swap(a+g,a+i);heapify(g);}
}

int main(void)
{
fin = fopen("heap.in","r");
fout= fopen("heap.out","w");

for (fscanf(fin,"%ld\n",&n),i=1;i<=n;fscanf(fin,"%ld",a+i),i++);
for (hs=n,i=n/2;i>0;heapify(i),i--);
for (i=n;i>=2;swap(a+1,a+i),hs--,heapify(1),i--);
for (i=1;i<=n;fprintf(fout,"%ld ",*(a+i)),i++);

fclose(fin);
fclose(fout);
return 0;
}

没有评论: