如何在不将其转换为1d数组的情况下对2d数组进行排序。 这就是我所做的 -
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数组转换为1d后对其进行排序。我的问题是如何在不将其转换为1d数组的情况下对2d数组进行排序?
我希望缩短所有值,而不是逐行
答案 0 :(得分:1)
您可以使用bubble sorting,对于简单数组,您必须使用2个嵌套for-loops
,因此对于2d数组,您必须使用3个嵌套for-loops
:
for(int i = 0; i < data2D.length; i++){
for(int j = 0; j < data2D[0].length; j++){
for(int k = 0; k < data2D[j].length; k++){
if(data2D[i][k]>data2D[i][k+1]){
int temp = data2D[i][k];
data2D[i][k] = data2D[i][k+1];
data2D[i][k+1] = temp;
}
}
}
}
答案 1 :(得分:1)
使用排序(bubblesort,quicksort)算法。根据您的需要选择,如果您的数据很小,则根本不重要。否则选择O(nlogn)算法
答案 2 :(得分:0)
试试这样的事情:
使用重载数组#Sort(T [] a,Comparator c)将Comparator作为第二个参数。
double[][] array= {
{1, 5},
{13, 1.55},
{12, 100.6},
{12.1, .85} };
java.util.Arrays.sort(array, new java.util.Comparator<double[]>() {
public int compare(double[] a, double[] b) {
return Double.compare(a[0], b[0]);
}
});