#include main() { float a[9]={2.1,3.3,0.1,1.5,8.2,4.1,3.2,10.,0.3},*ap; unsigned long n=9; ap = a-1; hpsort(n,ap); } hpsort(unsigned long n, float ra[]) { unsigned long i,ir,j,l; float rra; for (i=1; i<=n; i++) { printf("%2d %3.1f \n",i,ra[i]); } printf("\n"); if (n<2) return; l=(n >> 1)+1; ir=n; for (;;){ if (l > 1) { rra=ra[--l]; } else { rra=ra[ir]; ra[ir]=ra[1]; if (--ir == 1) { ra[1]==rra; break; } } i=l; j=l+l; while (j <= ir) { if (j < ir && ra[j] < ra[j+1]) j++; if (rra < ra[j]) { ra[i]=ra[j]; i=j; j <<= 1; } else break; } ra[i]=rra; } for (i=1; i<=n; i++) { printf("%2d %3.1f \n",i,ra[i]); } }