Java 将二维整数数组的行从最小到最大排序

Java 将二维整数数组的行从最小到最大排序,java,arrays,sorting,multidimensional-array,Java,Arrays,Sorting,Multidimensional Array,我有一个名为arry的二维整数数组,如下所示: [6, 2, 7] [3, 6, 7] [5, 6, 1] [5, 3, 4] [5, 3, 8] 我希望按照结果的方式对其进行排序(为此,我创建了相同大小的新数组,命名为table): 我有这个密码: for(int k=0;k

我有一个名为arry的二维整数数组,如下所示:

[6, 2, 7]
[3, 6, 7]
[5, 6, 1]
[5, 3, 4]
[5, 3, 8]
我希望按照结果的方式对其进行排序(为此,我创建了相同大小的新数组,命名为table):

我有这个密码:

for(int k=0;k
结果是:

[2147483647, 6, 7]
[2147483647, 6, 1]
[2147483647, 3, 4]
[2147483647, 3, 8]
[2147483647, 2, 7]
如果我从未将表的任何值设置为
2147483647
,我不明白表如何包含
2147483647

arry[indexSmallest][0] = 2147483647;

这行代码将每行的第一个元素设置为最外层for循环末尾的2147483647。这就是为什么它出现在每一行中。我不确定您打算在这里做什么,但这就是您获得该值的原因。

您已经在对象内部创建了此信息,并实现了Comparable/Comparator:

public YourObject implements Comparable {
    private long a;
    private long b;
    private long c;

    public YourObject (long a, long b, long c){
         this.a = a;
         this.b = b;
         this.c = c;
    }

    public int compareTo(Object arg0) {
        //make your comparison here...
    }

}
在主要功能方面: YourObject[]arr=新建YourObject[3]; arr[0]=新的YourObject(…,…); arr[1]=新的YourObject(…,…); arr[2]=新的YourObject(…,…)


数组。排序(arr)//对数据进行排序真正的问题在于这一行:

tabel[k] = arry[indexSmallest];
记住,数组是对象。此行不复制内部数组,而是设置对它的引用

因此,此时
tabel[k]
arry[indexSmallest]
都指向同一个数组对象。所以当你这样做的时候:

arry[indexSmallest][0] = 2147483647;
您可以将其更改为
arry[indexSmallest]
tabel[k]
(因为它们指向同一个对象)

要解决此问题,请访问阵列的
tabel[k]
acopy

tabel[k] = Arrays.copyOf(arry[indexSmallest], 3);

记住,Java数组是对象,这意味着它们是通过引用传递的。所以你实际上不是在复制内部数组;为此,请使用
Arrays.copyOf()

如果允许您使用带有比较器的
数组.sort()
,您可以这样做

java.util.Arrays.sort(arry, new java.util.Comparator<int[]>() {
    public int compare(int[] a1, int[] a2) {
        for (int k = 0; k < a1.length; k++) {
            if (a1[k] != a2[k]) {
                return a1[k] - a2[k];
            }
        }
        return 0;
    }
});
for (int k = 0; k < numOfArrays; k++) {
    System.out.println(java.util.Arrays.toString(arry[k]));
}
java.util.Arrays.sort(arry,new java.util.Comparator(){
公共整数比较(int[]a1,int[]a2){
对于(int k=0;k
如果这是不允许的,那么您仍然可以在上面的
Comparator.compare()方法中使用比较逻辑。这是您的基本排序逻辑,与实现细节无关。

您可以通过使用方法大大简化代码,或者可以实现类似的功能

java.util.Arrays.sort(arry, new java.util.Comparator<int[]>() {
    public int compare(int[] a1, int[] a2) {
        for (int k = 0; k < a1.length; k++) {
            if (a1[k] != a2[k]) {
                return a1[k] - a2[k];
            }
        }
        return 0;
    }
});
for (int k = 0; k < numOfArrays; k++) {
    System.out.println(java.util.Arrays.toString(arry[k]));
}

按列对二维数组进行选择排序
publicstaticvoidselectionsort2d(int[]arr,int列){
//迭代数组行的所有子集
//(0-last,1-last,2-last,3-last,…)
对于(int i=0;i
//测试
公共静态void main(字符串[]args){
int[]arr={
{6, 2, 7},
{3, 6, 7},
{5, 6, 1},
{5, 3, 4},
{5, 3, 8}};
//按第一列排序
选择或2D(arr,0);
//输出
对于(int[]行:arr)
System.out.println(Arrays.toString(row));
//[3, 6, 7]
//[5, 6, 1]
//[5, 3, 4]
//[5, 3, 8]
//[6, 2, 7]
}

可能重复:您认为arry[indexSmallest][0]=2147483647是什么?