二维数组的排序

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值