我试图按字典顺序解决所有整数的NX2数组。我没有办法如何实现它。此外,这应该尽可能少地完成。这是一个例子。
输入
2 2
1 1
4 3
2 1
10 1
输出
1 1
2 1
2 2
4 3
10 1
答案 0 :(得分:5)
Point
。答案 1 :(得分:1)
这与排序一堆整数基本上是同一个问题,除了你需要排序的一组对象(在这种情况下是元组 - 或在你的代码中有两个int数组)而不是整数。
与Python不同,Java不会自动推断像int []之类的字典排序,因此您可以将其传递给排序函数并期望它能够正常工作。幸运的是,java允许您定义排序应该是什么,然后使用内置排序方法对其进行排序。这是通过实现Comparator
然后定义其compare
方法来完成的,该方法告诉它如何比较两个对象。
下面给出的一个(非常简化的)例子。
import java.util.*;
class Main{
public static void main(String args[]){
int[][] array={{2,2},{1,1},{4,3},{2,1},{10,1}};
Arrays.sort(array, new Comparator<int[]>(){
public int compare(int[] a, int[] b){
//assumes array length is 2
int x,y;
if (a[0]!=b[0]) {
x=a[0];y=b[0];
}
else{
x=a[1];y=b[1];
}
if (x<y) return -1;
else if (x==y) return 0;
else return +1;
}
});
for(int[] term: array){
System.out.println(Arrays.toString(term));
}
}
}
答案 2 :(得分:0)
@amit解释了该怎么做。我只是想补充一点,你不想按字典顺序对数字数据进行排序。如果你这样做,你得到
1 1
10 1
2 1
etc.
因为按字典顺序排列10只是在1之后和之前2。 您想要执行常规数字排序。有时它被称为“自然”排序。
答案 3 :(得分:0)
这里尝试将此Point类与比较器一起使用:
class MyPoint implements Comparable <MyPoint> {
int x, y;
public MyPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int compareTo(MyPoint pt) {
int cmp = Integer.compare(x, pt.x);
if (cmp == 0) {
return Integer.compare(y, pt.y);
} else {
return cmp;
}
}
}
毕竟你需要做的是创建一些Point对象并对它们进行排序。这是一个例子:
ArrayList<MyPoint> pts = new ArrayList<MyPoint>(4);
pts.add( new MyPoint(3, 5));
pts.add( new MyPoint(2, 3));
pts.add( new MyPoint(3, 4));
pts.add( new MyPoint(1, 5));
Collections.sort(pts);
for (int i = 0; i < pts.size(); i++) {
MyPoint pt = pts.get(i);
System.out.println(pt.x + " " + pt.y);
}
输出:
1 5
2 3
3 4
3 5