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

Java 专栏收录该内容
5 篇文章 0 订阅
       <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;
    }

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

romaticjun2011

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值