code: public static int[] mergesort(int start, int length, IndirectComparator comparator) {
      final int[] src = createOrderArray(start, length);
  
      if (length > 1) {
        final int[] dst = (int[]) src.clone();
        topDownMergeSort(src, dst, 0, length, comparator);
        return dst;
      }
  
      return src;
    }
docs: Returns the order of elements between indices <code>start</code> and
  <code>length</code>, as indicated by the given <code>comparator</code>.
  <p>
  This routine uses merge sort. It is guaranteed to be stable.
  </p>