00001 void hpsort(unsigned long n, float ra[]) 00002 { 00003 unsigned long i,ir,j,l; 00004 float rra; 00005 00006 if (n < 2) return; 00007 l=(n >> 1)+1; 00008 ir=n; 00009 for (;;) { 00010 if (l > 1) { 00011 rra=ra[--l]; 00012 } else { 00013 rra=ra[ir]; 00014 ra[ir]=ra[1]; 00015 if (--ir == 1) { 00016 ra[1]=rra; 00017 break; 00018 } 00019 } 00020 i=l; 00021 j=l+l; 00022 while (j <= ir) { 00023 if (j < ir && ra[j] < ra[j+1]) j++; 00024 if (rra < ra[j]) { 00025 ra[i]=ra[j]; 00026 i=j; 00027 j <<= 1; 00028 } else j=ir+1; 00029 } 00030 ra[i]=rra; 00031 } 00032 }