获取排序矩阵的索引

时间:2019-04-03 15:07:53

标签: java

假设我输入一个矩阵并对她的行进行排序,例如:

(3 5 1 4

4 3 7 2

1 0 9 7)

然后对矩阵进行排序:

(1 3 4 5

2 3 4 7

0 1 7 9)

我要在对矩阵排序后显示索引矩阵

(2 0 3 1

3 1 0 2

1 0 3 2)

我使用此代码对矩阵进行排序:

public static void sortRows(int[][] matrix){        
    for (int i = 0; i < matrix.length; i++) {            
        Arrays.sort(matrix[i]);
     }
}

问题是:如何从输入矩阵中找到newIndex的矩阵?

预先感谢

2 个答案:

答案 0 :(得分:0)

创建一个新类MatrixEntry,其中包含值和初始索引。 实现Comparable接口,并在MatrixEntrySort类中定义compareTo方法。

class MatrixEntry {
  int value;
  int index;
}

class MatrixEntrySort implements Comparable<MatrixEntry> {

  public compareTo(MatrixEntry a, MatrixEntry b) {
    return(a.value - b.value); 
}

然后您可以通过以下方式对矩阵进行排序:

public static void sortRows(MatrixEntry[][] matrix) { 
  MatrixEntrySort mes = new MatrixEntrySort();

  for (int i = 0; i < matrix.length; i++) {            
      Arrays.sort(matrix[i], mes);
  }
}    

答案 1 :(得分:0)

您应该这样做。

import java.util.Arrays;
import java.util.Comparator;

public class StackOverflow {

    public static void main(String[] args) {
        mat=new Element[3][4];
        int[][] gMat={{3 ,5 ,1 ,4},
                      {4 ,3 ,7 ,2},
                      {1 ,0 ,9 ,7}};
        for (int i=0;i<gMat.length;i++){
            for (int j=0;j<gMat[0].length;j++){
                mat[i][j]=new Element(j,gMat[i][j]);
            }
        }

        sort();
        for (int i=0;i<gMat.length;i++){
            for (int j=0;j<gMat[0].length;j++){
                System.out.print(mat[i][j].idx+" ");
            }
            System.out.println();
        }
    }

    static class Element{
        int idx;
        int val;
        Element(int idx,int val){
            this.idx=idx;
            this.val=val;
        }
    }

    static Element[][] mat;
    static void sort(){
        for (int i=0;i<mat.length;i++){
            Arrays.sort(mat[i], Comparator.comparingInt(o -> o.val));
        }
    }
}