function quantileIndex(values, p, valueof) {
var n,
mix = 0,
index0,
index1;
values = valueof
? Float64Array.from(values, valueof)
: Float64Array.from(values);
const value = i => values[i],
indices = Int32Array.from({ length: values.length }, (_, i) => i);
console.log(indices);
if (!(n = values.length)) return;
if ((p = +p) <= 0 || n < 2) {
index0 = index1 = d3.minIndex(values);
} else if (p >= 1) {
index0 = index1 = d3.maxIndex(values);
} else {
let i = (n - 1) * p,
i0 = Math.floor(i);
const indices0 = d3
.quickselect(indices, i0, 0, n - 1, (i, j) =>
d3.ascending(value(i), value(j))
)
.subarray(0, i0 + 1);
index0 = indices0[d3.maxIndex(indices0, value)];
const indices1 = indices.subarray(i0 + 1);
index1 = indices1[d3.minIndex(indices1, value)];
mix = i - i0;
}
const value0 = values[index0],
value1 = values[index1],
median = mix ? (value0 + value1) / 2 : value0;
return { index0, index1, value0, value1, median, indices };
}