【发布时间】:2015-08-12 13:24:39
【问题描述】:
如何对二维数组进行排序而不将其转换为一维数组。 这就是我所做的 -
private int[][] data2D = {{1,2,3},{6,8},{3,2,5,2}};
private void sortCustom(){
int totalElements = 0;
// calculating total elements
for(int[] i : data2D){
totalElements = totalElements+i.length;
}
int[] data1D = new int[totalElements];
int m = 0 ;
// converting 2D data into 1D
for(int i=0 ; i<data2D.length ; i++ ){
for(int j=0 ; j<data2D[i].length ; j++){
data1D[m++] = data2D[i][j];
}
}
// sorting data
Arrays.sort(data1D);
//converting 1D data into 2D
int n=0;
for(int i=0 ; i<data2D.length ; i++){
for(int j=0 ; j<data2D[i].length ; j++){
data2D[i][j] = data1D[n++];
}
}
// print sorted data
for(int i=0 ; i<data2D.length ; i++){
for(int j=0 ; j<data2D[i].length ; j++){
System.out.print(data2D[i][j]+" ");
}
System.out.println();
}
}
输出:
1 2 2
2 3
3 5 6 8
如您所见,我可以在将二维数组转换为一维数组后对其进行排序。我的问题是如何对二维数组进行排序而不将其转换为一维数组?
我想缩短所有值,而不是逐行
【问题讨论】:
-
您所做的也可以应用于 2D、3D 或 nD。您对每个 n 维进行冒泡排序。这甚至可以独立于你有多少维度来完成。你也可以看看Radix 来了解它是怎么做的,因为这个想法有点相似。
-
二维数组只是数组的数组。遍历你的数组并对它们进行排序。
-
如果您查看他的输入和输出,他似乎想要对所有值进行排序,而不仅仅是对每个单独的数组进行排序。
-
是的,我想对所有值进行排序,否则我会将每个项目视为一个数组