我试图解决字母排序的所有整数的NX2阵列二维坐标数组。我不知道如何实现它。我认为Python中有lexsort,但在java中没有这种类型的函数。这也应该尽可能少。这里的例子:Lexographically分拣用java
Input:
2 2
1 1
4 3
2 1
10 1
Output:
1 1
2 1
2 2
4 3
10 1
我试图解决字母排序的所有整数的NX2阵列二维坐标数组。我不知道如何实现它。我认为Python中有lexsort,但在java中没有这种类型的函数。这也应该尽可能少。这里的例子:Lexographically分拣用java
Input:
2 2
1 1
4 3
2 1
10 1
Output:
1 1
2 1
2 2
4 3
10 1
实现自己的类:Point
与两个整数的领域。
让它实现Comparable或实现此一等级Comparator。
填充数组或这些点的List,并使用相关排序排序是:Arrays.sort()或Collections.sort()分别
迭代结果数组/列表并提取回您的观点。
现在我正在使用这种方法:http://stackoverflow.com/questions/4359869/sorting-2-dimensional-java-array 现在我的问题是我需要声明特定大小的数组(这意味着所有元素都被初始化为0)。我需要向数组添加一行,对整个矩阵进行排序,然后添加另一行,对整个矩阵进行排序,执行一些操作,直到指定的大小。 因为所有元素最初都是0,所以当新行被添加和排序时,它会进入矩阵的底部。有没有其他方法呢?我不想使用Points实现这个。 – sgowd 2012-01-09 07:59:29
@amit解释做什么。我只想补充一点,你不想按照字典顺序排列数字数据。如果你这样做你会得到
1 1
10 1
2 1
etc.
因为字典序10仅有1后前2 你要定期进行数字排序。有时它被称为“自然”排序。
这与排序一堆整数基本上是一样的问题,除了整数不是你有一组对象(在这种情况下是元组,或者在你的代码中是两个项诠释数组),需要排序。
不同的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));
}
}
}
这里尝试使用此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
你确定你要找的字典顺序?你的输出结果是'10 1',我不认为你的建议。 – 2012-01-09 07:11:44
^是的,如果你采取列明智的,10到最后.. – sgowd 2012-01-09 07:23:14
看起来@AlexR也注意到了它。你的意思是做一个数字排序,如果每个数字被解释为一个字符串,则不是基于字符的排序。这是什么让它不是字典顺序。 – 2012-01-09 07:25:44