问题是我有2个数组int input2[]={5,1,9,3,8};
和int input3[]={2,0,3,6,1};
已经使用Arrays.sort(input2);
对数组input2进行了排序现在我想根据数组inputs3
input2
中
输入数组前排序 - 5,1,9,3,8 输入数组post Sort - 1,3,5,8,9 现在,数组input3的元素也应该根据数组input2的位置而改变 preSort 2,0,3,6,1 发布排序0,6,2,1,3
虽然我已编写代码,但正在寻找最佳解决方案enter code here
private static int[] swap(int[] arr, int i, int j,int [] arr2) {
arr2[i]=arr[j];
return arr2;
}
public static void main(String[] args) {
int input2[]={5,1,9,3,8};
int input3[]={2,0,3,6,1};
int []temp=input2.clone();
int []input4=input3.clone();
Arrays.sort(input2);
for(int i=0;i<=input2.length-1;i++){
for(int j=0;j<=input2.length;j++){
if(input2[i]==temp[j]){
input4= swap(input3,i,j,input4);
break;
}
}
}
}
答案 0 :(得分:3)
据推测,这些价值观(input2
,input3
)彼此之间存在某种关系?比如,它们是某些点的x,y坐标,或类似的东西?如果是这样,您应该将它们放在一些对象中,然后对对象进行排序。
public class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
@Override
public String toString() {
return x + ", " + y;
}
}
public void sortPoints() {
int xs[] = { 5, 1, 9, 3, 8 };
int ys[] = { 2, 0, 3, 6, 1 };
List<Point> points = new ArrayList<>();
for (int i = 0; i < xs.length; ++i) {
points.add(new Point(xs[i], ys[i]));
}
Collections.sort(points, (a, b) -> a.getX() - b.getX());
points.forEach(p -> System.out.println(p.getY()));
}
答案 1 :(得分:1)
除了制作课程的其他解决方案之外,还有另一种解决方案,
public class SortTesting {
public static void main(String[] args) {
HashMap map = new HashMap();
TreeMap sortedMap = new TreeMap();
map.put(5, 2);
map.put(1, 0);
map.put(9, 3);
map.put(3, 6);
map.put(8, 1);
sortedMap.putAll(map);
System.out.println("results: " + sortedMap);
}
}
答案 2 :(得分:0)
您可以更改交换方法,以便一次同时切换要交换的所有列表的元素。
private static int[] swap(int i, int j,List<int[]> listOfArrays) {
for(int[] array : listOfArrays) {
int tmp = array[i];
array[i]=array[j];
array[j]=tmp;
}
return arr2;
}
但你必须自己编写。
另一种选择是使用功能接口并在比较时交换第三个数组。用
Arrays.sort(T[] a, Comparator<? super T> c)
方法
换句话说,在对它进行排序后已经很晚了,你必须在排序时这样做。或者初始数组需要重构。
答案 3 :(得分:0)
假设您有Java 8,您可以生成一个Integer索引数组(使用Integer因为lambda compare不能与基元一起使用),根据input2对索引数组进行排序,然后根据输入2重新排序input2和input3指数数组。
package x;
import java.util.Arrays;
public class x {
public static void main(String[] args) {
int input2[]={5,1,9,3,8};
int input3[]={2,0,3,6,1};
// generate array of indices
Integer[] I = new Integer [input2.length];
for(int i = 0; i < I.length; i++)
I[i] = i;
// sort array of indices according to input2
Arrays.sort(I, (i, j) -> input2[i]-input2[j]);
// reorder input2 and input3 in place using sorted indices
// also reorder indices back to 0 to length-1
// time complexity is O(n)
for(int i = 0; i < I.length; i++){
if(i != I[i]){
int t2 = input2[i];
int t3 = input3[i];
int j;
int k = i;
while(i != (j = I[k])){
input2[k] = input2[j];
input3[k] = input3[j];
I[k] = k;
k = j;
}
input2[k] = t2;
input3[k] = t3;
I[k] = k;
}
}
// display result
for (int i = 0; i < input2.length; i++) {
System.out.println("input2 " + input2[i] + " input3 " + input3[i]);
}
}
}