in src/main/java/org/apache/datasketches/characterization/req/TrueFloatRanks.java [85:112]
private void compute() {
length = stream.length;
sortedStream = stream.clone();
Arrays.sort(sortedStream);
sortedAbsRanks = new int[length];
if (ltEq) { //LE
sortedAbsRanks[length - 1] = length;
int i = length - 2;
while (i >= 0) { //goes backwards
if (sortedStream[i] == sortedStream[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 (sortedStream[i - 1] == sortedStream[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(sortedStream, 0, length - 1, stream[j]);
streamAbsRanks[j] = sortedAbsRanks[idx];
}
}