docs: protected <T extends SpatialComparable> void strPartition(List<T> objs, int start, int end, int depth, int dims, int maxEntries, SpatialSingleMeanComparator c, List<List<T>> ret) {
      final int p = (int) FastMath.ceil((end - start) / (double) maxEntries);
      final int s = (int) FastMath.ceil(FastMath.pow(p, 1.0 / (dims - depth)));
  
      final double len = end - start; // double intentional!
      for(int i = 0; i < s; i++) {
        // We don't completely sort, but only ensure the quantile is invariant.
        int s2 = start + (int) ((i * len) / s);
        int e2 = start + (int) (((i + 1) * len) / s);
        // LoggingUtil.warning("STR " + dim + " s2:" + s2 + " e2:" + e2);
        if(e2 < end) {
          c.setDimension(depth);
          QuickSelect.quickSelect(objs, c, s2, end, e2);
        }
        if(depth + 1 == dims) {
          ret.add(objs.subList(s2, e2));
        }
        else {
          // Descend
          strPartition(objs, s2, e2, depth + 1, dims, maxEntries, c, ret);
        }
      }
    }