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

t1qtbnec  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(290)

我希望排序数组不改变它的数据。所以我只想把它的索引保存在另一个数组中。为此,我使用了冒泡排序算法,在每个交换步骤中,我都会更改新数组的元素,从而保留实际数组的索引。这是我的代码,但它不能正常工作

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](实际数组的索引)

epfja78i

epfja78i1#

你也忘了对实际数组进行排序。如果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;
}

不过,这是一个低效的解决方案。我怀疑这是一些算法分配的一部分,所以我将留给你的优化。

相关问题