public static Object[] sort_vector( Object[] v, procedure p )
{
int n = v.Length;
for ( int incr= n/2 ; incr != 0 ; incr/=2 )
for ( int i= incr ; i<n ; ++i )
for ( int j= i-incr ; j >= 0 ; j-= incr )
if (p.funcall2( v[j], v[j+incr] ) != bbool.faux)
break;
else
{
Object tmp = v[j + incr];
v[j + incr]= v[j];
v[j]= tmp;
}
return v;
}