in commons-numbers-arrays/src/main/java/org/apache/commons/numbers/arrays/QuickSelect.java [975:1021]
private static int repeatedStepFarRight(double[] a, int l, int r, int k, int[] upper, int flags) {
// Mirror image repeatedStepFarLeft
final int fp;
final int e;
int p;
if (flags <= MODE_SAMPLING) {
// 11th 12th-tile
fp = (r - l + 1) / 12;
e = r - fp;
// Use adaption
p = e - mapDistance(r - k, l, r, fp);
} else {
// i in 3rd quartile; max into i+f (4th quartile)
final int f = (r - l + 1) >> 2;
final int f2 = f + f;
final int end = r - f2;
for (int i = r - f; i > end; i--) {
if (a[i - f] > a[i + f]) {
final double u = a[i - f];
a[i - f] = a[i + f];
a[i + f] = u;
}
if (a[i - f2] > a[i]) {
final double v = a[i - f2];
a[i - f2] = a[i];
a[i] = v;
}
if (a[i] > a[i + f]) {
final double u = a[i];
a[i] = a[i + f];
a[i + f] = u;
}
}
// 11th 12th-tile
fp = f / 3;
e = r - fp;
// Upper margin has 2(d+1) elements; d == e - (position in sample)
// Force k into the upper margin
p = e - ((r - k) >>> 1);
}
final int s = e - fp + 1;
for (int i = s; i <= e; i++) {
Sorting.sort3(a, i - fp, i, i + fp);
}
p = quickSelectAdaptive(a, s, e, p, p, upper, MODE_FR_SAMPLING);
return expandPartition(a, l, r, s, e, p, upper[0], upper);
}