docs: protected void zSort(List<? extends SpatialComparable> objs, int start, int end, double[] mms, int[] dims, int depth) {
      final int numdim = (dims != null) ? dims.length : (mms.length >> 1);
      final int edim = (dims != null) ? dims[depth] : depth;
      // Find the splitting points.
      final double min = mms[2 * edim], max = mms[2 * edim + 1];
      double spos = (min + max) / 2.;
      // Safeguard against duplicate points:
      if(max - spos < STOPVAL || spos - min < STOPVAL) {
        boolean ok = false;
        for(int d = 0; d < numdim; d++) {
          int d2 = ((dims != null) ? dims[d] : d) << 1;
          if(mms[d2 + 1] - mms[d2] >= STOPVAL) {
            ok = true;
            break;
          }
        }
        if(!ok) {
          return;
        }
      }
      int split = pivotizeList1D(objs, start, end, edim, spos, false);
      assert (start <= split && split <= end);
      int nextdim = (depth + 1) % numdim;
      if(start < split - 1) {
        mms[2 * edim] = min;
        mms[2 * edim + 1] = spos;
        zSort(objs, start, split, mms, dims, nextdim);
      }
      if(split < end - 1) {
        mms[2 * edim] = spos;
        mms[2 * edim + 1] = max;
        zSort(objs, split, end, mms, dims, nextdim);
      }
      // Restore ranges
      mms[2 * edim] = min;
      mms[2 * edim + 1] = max;
    }