如果您希望索引作为原始 int 数组,则效果很好,那么您将必须创建自己的二进制排序器,这应该不难。
编辑:我改编了java的mergesorter来使用int。这应该可以节省您编写自己的时间。
public static void main(String[] args) {
        double[] dist = new double[] {3.2, 1.4, 7.3, 2.2, 9.1};
        int[] indices = createIndicies(dist);
        System.out.println(Arrays.toString(dist) + " " +  Arrays.toString(indices));
    }
    public static int[] createIndicies(double[] array) {
        int[] intArray = new int[array.length];
        for (int j = 0; j < array.length; j++) {
            intArray[j] = j;
        }
        int[] indicies = intArray.clone();
        mergeSort(intArray, indicies, 0, intArray.length, 0, new IndiciesSorter(array));
        return indicies;
    }
    public static class IndiciesSorter implements Comparator<Integer> {
        double[] array;
        public IndiciesSorter(double[] array) {
            this.array = array;
        }
        @Override
        public int compare(Integer o1, Integer o2) {
            return Double.compare(array[o1], array[o2]);
        }
    }
    private static void mergeSort(int[] src, int[] dest, int low,
            int high, int off, Comparator c) {
        int length = high - low;
        // Insertion sort on smallest arrays
        if (length < 7) {
            for (int i = low; i < high; i++)
                for (int j = i; j > low && c.compare(dest[j - 1], dest[j]) > 0; j--)
                    swap(dest, j, j - 1);
            return;
        }
        // Recursively sort halves of dest into src
        int destLow = low;
        int destHigh = high;
        low += off;
        high += off;
        int mid = (low + high) >>> 1;
        mergeSort(dest, src, low, mid, -off, c);
        mergeSort(dest, src, mid, high, -off, c);
        // If list is already sorted, just copy from src to dest. This is an
        // optimization that results in faster sorts for nearly ordered lists.
        if (c.compare(src[mid - 1], src[mid]) <= 0) {
            System.arraycopy(src, low, dest, destLow, length);
            return;
        }
        // Merge sorted halves (now in src) into dest
        for (int i = destLow, p = low, q = mid; i < destHigh; i++) {
            if (q >= high || p < mid && c.compare(src[p], src[q]) <= 0)
                dest[i] = src[p++];
            else
                dest[i] = src[q++];
        }
    }
    private static void swap(int[] x, int a, int b) {
        int t = x[a];
        x[a] = x[b];
        x[b] = t;
    }