in src/main/java/org/apache/datasketches/characterization/TrueRanks.java [112:139]
private void compute(final boolean LTEQ) {
length = dStream.length;
sortedDStream = dStream.clone();
Arrays.sort(sortedDStream);
sortedAbsRanks = new int[length];
if (LTEQ) { //if LTEQ == true, criteria is <=
sortedAbsRanks[length - 1] = length;
int i = length - 2;
while (i >= 0) { //goes backwards
if (sortedDStream[i] == sortedDStream[i + 1]) { sortedAbsRanks[i] = sortedAbsRanks[i + 1]; }
else { sortedAbsRanks[i] = i + 1; }
i--;
}
} else { // LT
sortedAbsRanks[0] = 0;
int i = 1;
while (i < length) { //forwards
if (sortedDStream[i - 1] == sortedDStream[i]) { sortedAbsRanks[i] = sortedAbsRanks[i - 1]; }
else { sortedAbsRanks[i] = i; }
i++;
}
}
streamAbsRanks = new int[length]; //put the ranks in original stream order
for (int j = 0; j < length; j++) {
final int idx = BinarySearch.find(sortedDStream, 0, length - 1, dStream[j]);
streamAbsRanks[j] = sortedAbsRanks[idx];
}
}