在 Java 中排序后保留数组中元素的索引

Keeping indexes of an elements in the array after sorting in Java

我想要排序数组而不实际更改其数据。所以我只想将其索引保留在另一个数组中。为此,我使用冒泡排序算法,并且在每个交换步骤中,我更改新数组的元素,以保留实际数组的索引。那是我的代码,但它不能正常工作

int[] bSort(int[] arrivalTimes) {
    int[] sequence = new int[arrivalTimes.length];
    for (int i = 0; i < sequence.length; i++) {
        sequence[i] = i;
    }

    for (int i = 0; i < arrivalTimes.length - 1; i++) {
        for (int j = i + 1; j < arrivalTimes.length; j++) {
            if (arrivalTimes[i] > arrivalTimes[j]) {
                int temp = sequence[i];
                sequence[i] = sequence[j];
                sequence[j] = temp;
            }
        }
    }
    return sequence;
}

所以如果输入数组是 [2, 5, 1, 0, 4]

那么序列数组应该是[3, 2, 0, 4, 1](实际数组的索引)

您也忘记了对实际数组进行排序。如果 arrivalTimes 数组未排序,您的条件将不会按您期望的方式运行。

int[] bSort(int[] arrivalTimes) {
    int[] sequence = new int[arrivalTimes.length];
    for (int i = 0; i < sequence.length; i++) {
        sequence[i] = i;
    }

    for (int i = 0; i < arrivalTimes.length - 1; i++) {
        for (int j = i + 1; j < arrivalTimes.length; j++) {
            if (arrivalTimes[i] > arrivalTimes[j]) {
                int temp = sequence[i];
                sequence[i] = sequence[j];
                sequence[j] = temp;
                
                int temp2 = arrivalTimes[i];
                arrivalTimes[i] = arrivalTimes[j];
                arrivalTimes[j] = temp2;               
            }
        }
    }
    return sequence;
}

虽然这是一个低效的解决方案。我怀疑这是某些算法分配的一部分,所以我会把优化留给你。