     sort( r, lo, up )
     ArrayToSort r;
     int lo, up;

     {int i;
     /*** construct heap ***/
     for ( i=up/2; i>1; i-- ) siftup(r,i,up);
     /*** repeatedly extract maximum ***/
     for ( i=up; i>1; i-- )   {
          siftup(r,1,i);
          exchange( r, 1, i );
          }
     };
