假设我输入一个矩阵并对她的行进行排序,例如:
(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的矩阵?
预先感谢
答案 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));
}
}
}