针对二维数组的某一项对二维的数组排序我的思路是降维排序
/**
* 针对二维数组的其中一维进行排序
* @param in 二维数组
* @param n 维度
* @return 排序后的二维数组
*/
public static int[][] Sort(int[][] in,int n){
//用于降维
int[] a=new int[in.length];
//还原时需要用到的中转数组
int[][] b=new int[1][1];
/*首先是降维,将要针对的那个维度降维成一维数组
这里是将数组thing中的50,60,100,70变为一维数组赋给数组a
*/
for(int i=0;i<in.length;i++){
a[i]=in[i][n];
}
//使用java库的排序函数对a进行排序排序
Arrays.sort(a);
/*下面的操作是还原为二维数组的排序
其主要思想是以a为基准对thing中的元素进行排序,
例如a[0]=50,就在thing中找到thing[m][1]=50的,
将thing[m]放到第一位,以此类推
*/
for (int j=0;j<in.length;j++) {
for (int m=0;m<in.length;m++){
if(a[j]==in[m][n]){
in[m][n]=-in[m][n];//解决重复问题
b[0]=in[j];//由于这里还原时是地址赋值
//为了避免地址覆盖所以需要一个中间量存储被换数组的地址
in[j]=in[m];
in[m]=b[0];
break;
}
}
}
for(int j=0;j<in.length;j++) {
in[j][n]=-in[j][n];
}
return in;
}
//测试方法
public static void main(String[] args) {
//定义一个二维数组并赋值
int[][] in = {{4, 50}, {6, 50}, {9, 100}, {8, 50}};
in=Sort(in,1);
for(int i=0;i<in.length;i++){
for(int m=0;m<in[i].length;m++){
System.out.print(in[i][m]+" ");
}
System.out.println();
}
}
8f2e1731-d36d-48b1-8ef7-f26fba2c4c00