【问题标题】:Keeping indexes of an elements in the array after sorting in Java在Java中排序后保留数组中元素的索引
【发布时间】:2021-03-04 17:57:29
【问题描述】:

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

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

【问题讨论】:

    标签: java arrays algorithm sorting bubble-sort


    【解决方案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;
    }
    

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

    【讨论】:

    • 我可以使用归并排序来解决这个问题吗?
    • 花点时间思考实现最终目标的各种方法。您可以使用 创建一个 pairs 数组,然后按值排序,这将按所需顺序提供索引。您还可以使用映射来散列键值对,使用 nlogn 排序然后查询映射。您可以使用有序地图……等等……由您决定哪种方法最能满足您的需求。有很多数据结构可以用来解决这个问题。我认为最好的解决方案不需要太多的内存开销,所以请记住这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2014-01-07
    • 1970-01-01
    相关资源
    最近更新 更多