1、对二位数组直接排序,只对二维中的一维数组进行了排序,而不会改变一维数组中的值。
public static void main(String[] args){
int[][] arr={{12,45,7,8,9,565,45,6},{4,54,78,88,99,100},{65,66,88,11,20,30},{1,454,78,89,661,54,587,101,98}};
//直接对二维数组进行排序,但是只能将二维数组中的一维数组进行重新排序,不改变其中的值;
for(int i=0;i<arr.length;i++){
for(int j=arr[i].length-1;j>0;j--){
for(int k=0;k<j;k++){
if(arr[i][k]<arr[i][k+1]){
int temp=arr[i][k+1];
arr[i][k+1]=arr[i][k];
arr[i][k]=temp;
}
}
}
}
//输出二维数组中的值
for(int[] i:arr){
for(int j:i){
System.out.print(j+" ");
}
System.out.println();
}
}
输出的结果:
565 45 45 12 9 8 7 6
100 99 88 78 54 4
88 66 65 30 20 11
661 587 454 101 98 89 78 54 1
2、先将二维转化成一维数组,在对一维数组进行排序。此方法会改变原二维中的一维数组中的值。
public static void main(String[] args){
int[][] arr={{12,45,7,8,9,565,45,6},{4,54,78,88,99,100},{65,66,88,11,20,30},{1,454,78,89,661,54,587,101,98}};
/**
* 二维数组的排序,先将二维数组转化成一维数组,然后对一维数组进行排序后把值再交还给二维数组
* @param sum 用于存储二维数组中的一维数组的总长度
* @param arr1 一维数组用于存储二维数组中的值
*/
int sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i].length;
}
int[] arr1=new int[sum];
//把二维数组的值交给一维数组
int index=0;//一维数组的下标
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
arr1[index]=arr[i][j];
index++;
}
}
//对一维数组进行排序
for(int i=0;i<arr1.length;i++){
for(int j=i+1;j<arr1.length;j++){
if(arr1[j]>arr1[i]){
int temp=arr1[i];
arr1[i]=arr1[j];
arr1[j]=temp;
}
}
}
//将一维数组中的值交还给二维数组中
index=0;
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
arr[i][j]=arr1[index];
index++;
}
}
//打印二维数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
输出的结果:
661 587 565 454 101 100 99 98
89 88 88 78 78 66
65 54 54 45 45 30
20 12 11 9 8 7 6 4 1