繁体   English   中英

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

您还忘记对实际数组进行排序。 如果到达时间数组未排序,则您的条件不会按照您期望的方式运行。

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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM