public final void fun(ArgInterface function, int lo, int hi) {
T[] buf = this.array;
int i = lo;
int j = hi;
int p = (i + j) >> 1;
while ((i <= j)) {
while (((i < hi) && (function.operation(i, p) < 0))) {
++i;
}
while (((j > lo) && (function.operation(j, p) > 0))) {
--j;
}
if ((i <= j)) {
T t = buf[i];
buf[i++] = buf[j];
buf[j--] = t;
}
}
if ((lo < j)) {
this.fun(function, lo, j);
}
if ((i < hi)) {
this.fun(function, i, hi);
}
}