#include<stdio.h> void heapAdjust(int *a,int s,int m); int main() { FILE *f_in,*f_out; int i,j,n; int a[100]; f_in=fopen("test.txt","r"); f_out=fopen("out.txt","a"); i=0; while(fscanf(f_in,"%d",&a[++i])!=EOF); n=--i; //首先建立堆 for(i=n/2;i>0;i--) heapAdjust(a,i,n); for(i=n;i>1;i--) { a[0]=a[i]; a[i]=a[1]; a[1]=a[0]; heapAdjust(a,1,i-1); } for(i=1;i<=n;i++) fprintf(f_out,"%d ",a[i]); getch(); fclose(f_in); fclose(f_out); return 0; } void heapAdjust(int *a,int s,int m) { int rc; int i,j; rc=a[s]; for(j=2*s;j<=m;j*=2) { if(j<m&&a[j]<a[j+1]) j++; if(rc>=a[j]) break; a[s]=a[j]; s=j; } a[s]=rc; return ; }