Java 二维数组根据维度升序或降序排序

该博客介绍了如何使用Java对二维数组进行排序,特别是根据指定的列(维度)进行升序或降序排序。提供了两个方法,一个用于按单一条件排序,另一个支持按两个条件排序。代码中使用了临时数组进行数据交换,并通过比较字符串转换的整数值来实现排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       <span style="color:#FF0000;">/*二维数组排序(按第row列排序),sort为true从高到低排序反之从低到高排序*/</span>
	public static String[][] arraySort( String array[][], int len,int row, boolean sort)
	{
	    if( array!=null && len > 0 ) // 假如传入的输入不为 NULL 值
	    {
	      // int len = array.length;        // 得到排序数组的长度(已直接给出给出)
	        int width = array[0].length;    // 得到数组的列数
	        boolean exchange = true;            // 交换记录
	        String temp[] = new String[width];    // 用于存放临时值
	        if( width < row ) {
	            System.out.println( "错误信息:排序列数大于数组列数" );
	            return null;
	        }
	        for( int i=0; i<len-1; i++)
	        {
	            exchange = false;    // 交换标记为假
	            for( int j=len-2; j>=i; j--)
	            {
	                if( array[j][row]    == null ) array[j][row] = "";
	                if( array[j+1][row]    == null ) array[j+1][row] = "";
	                if( sort )    // 从高到底
	                {
	                    //if( array[j][row].compareTo(array[j+1][row]) < 0 )
	                    if( Integer.valueOf(array[j][row]) < Integer.valueOf(array[j+1][row]) )
	                    {
	                        for(int t=0; t<width; t++)
	                            temp[t] = array[j][t];    // 存放临时数据
	                        for(int t=0; t<width; t++)
	                            array[j][t] = array[j+1][t]; // 数据交换
	                        for(int t=0; t<width; t++)
	                            array[j+1][t] = temp[t];
	                        exchange = true;    // 置交还标记为真
	                    }
	                } else { // 从底到高
	                   // if( array[j][row].compareTo(array[j+1][row]) > 0 )
	                	if( Integer.valueOf(array[j][row]) > Integer.valueOf(array[j+1][row]) )
	                    {
	                        for(int t=0; t<width; t++)
	                            temp[t] = array[j][t];    // 存放临时数据
	                        for(int t=0; t<width; t++)
	                            array[j][t] = array[j+1][t]; // 数据交换
	                        for(int t=0; t<width; t++)
	                            array[j+1][t] = temp[t];
	                        exchange = true;    // 置交还标记为真
	                    }
	                }
	            }
	            if( exchange==false )
	                break;
	        }
	        return array;
	    }
	    return array;
	}

   <span style="color:#FF0000;"> /*按第row_1、row_2列从低到高排序*/</span>
    public String[][] arraySort( String s[][], int row_1, int row_2 )
    {
        String array[][] = arraySort( s, row_1, false ); // 对第一个条件进行排序
        if( array== null ) {
            System.out.println( "错误信息:二维数组排序出错" );
            return null;
        }
        int begin = 0;
        int Col = 0;
        for( int i=0; i<array.length-1; i=i+Col ) {
            Col = 1; //第一行
            for( int k=i+1; k<array.length; k++ ) {
                if( array[i][row_1].equals(array[k][row_1]) ) {
                    Col ++;
                } else {
                    break;
                }
            }
            if( Col > 1 ) {
                String swpData[][] = new String[Col][s[0].length];
                for( int m=i; m<i+Col; m++ ) {
                    swpData[m-i] = array[m];
                }
                arraySort( swpData, row_2, false );// 对第二个条件进行排序
                for( int m=i; m<i+Col; m++ )
                    array[m] = swpData[m-i];
            }
        }
        return array;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值