【发布时间】:2018-11-27 22:14:23
【问题描述】:
我必须对数组进行排序以找到它的中位数,但现在我需要恢复数组的初始值,原样放置。这可能吗?
【问题讨论】:
-
排序前和排序后复制数组怎么样?
-
这个。任何保存原始订单然后重新排序的策略都会使复制数组的时间相形见绌。
-
@MartynasKrupskis 请将其中一个答案标记为已接受。
标签: java
我必须对数组进行排序以找到它的中位数,但现在我需要恢复数组的初始值,原样放置。这可能吗?
【问题讨论】:
标签: java
你不能那样做。排序是不可逆的。但是,您也可以将原始列表的所有元素添加到新的 ArrayList 中,然后对该列表进行排序。
List<String> original = ...;
List<String> copy = new ArrayList<>(original);
Collections.sort(copy);
我不会担心副本的足迹。这是一个浅拷贝,这意味着元素本身不会被复制,而只会创建一个新列表,其中引用了原始列表中包含的元素。而且这个操作非常快。如果列表非常非常大,我只会担心。
【讨论】:
使用@McEmperors 回答但使用数组
Object[] saved = Arrays.copyOf(old, old.length);
Array.sort(old);
【讨论】:
有几种方法可以实现你想要的:
int[] unsorted = {2,3,1};
int[] sorted = unsorted.clone();
Arrays.sort(sorted);
//find mean in sorted then proceed with unsorted
create a custom sort function that retains a mapping between the positions.
【讨论】: