words[]: extern void _rsort ( uint8 & , uint8 & ) ; void rsort ( uint8 * a , uint8 * e ) { if ( a >= e ) return ; e -- ; do { assert ( a <= e ) ; switch ( e - a ) { case 2 : _rsort ( * a , * -- e ) ; _rsort ( * a ++ , * ++ e ) ; case 1 : _rsort ( * a , * e ) ; case 0 : return ; } uint8 * a0 = a ; uint8 * e0 = e ; _rsort ( * a , * e ) ; { uint8 a_lim = * a ++ ; uint8 e_lim = * e -- ; do { until ( a >= e ) ; if ( * a < a_lim ) if ( e_lim < * a ) a_lim = * a ++ ; else swap ( * a , * e -- ) ; else a ++ ; until ( a >= e ) ; if ( e_lim < * e ) if ( * e < a_lim ) e_lim = * e -- ; else swap ( * a ++ , * e ) ; else e -- ; } if ( * a < a_lim ) e -- ; else a ++ ; } if ( e - a0 > e0 - a ) { rsort ( a0 , e ) ; a = e ; e = e0 ; } else { rsort ( a , e0 ) ; a = a0 ; } } } ""