当前位置: 代码迷 >> J2SE >> 二维数组按指定的列排序有关问题
  详细解决方案

二维数组按指定的列排序有关问题

热度:54   发布时间:2016-04-24 00:21:48.0
二维数组按指定的列排序问题
写一个 Java 程序,实现对一个规则二维数组按 指定的列 进行排序?
  a为二维数组,sortCols是要按第几列排序,sortord 用于指定排序方式 
  你可以约定 true 为升序,false 为降序 
  必要的时候可以补充其它方法,然后在 sortIntArrays 中调用 
  要求排序后,不能破坏原有的数据结构! 
  如 { 12, 34, 68, 32, 9, 12, 545 } 不论排到了第几个,这个小数组中的数据是不能变化的 
  换言之就是根据某个数排序,比如 34 ,该小数组的其他的数据跟着一起变动 
   
  public void sortIntArrays( int[][] a , String sortCols , boolean sortord ) 
  {
  //补充代码
  }
   
  int array[][] = new int[][] {  
  { 12, 34, 68, 32, 9, 12, 545 },  
  { 34, 72, 82, 57, 56, 0, 213 },  
  { 12, 34, 68, 32, 21, 945, 23 },  
  { 91, 10, 3, 2354, 73, 34, 18 },  
  { 12, 83, 189, 26, 27, 98, 33 },  
  { 47, 23, 889, 24, 899, 23, 657 },  
  { 12, 34, 68, 343, 878, 235, 768 },  
  { 12, 34, 98, 56, 78, 12, 546 },  
  { 26, 78, 2365, 78, 34, 256, 873 }  
  };  
  对于以上数组,按照最后一列排序(升序)后的结果为:
  { 91, 10, 3, 2354, 73, 34, 18 }
  { 12, 34, 68, 32, 21, 945, 23 }
  { 12, 83, 189, 26, 27, 98, 33 }
  { 34, 72, 82, 57, 56, 0, 213 }
  { 12, 34, 68, 32, 9, 12, 545 }
  { 12, 34, 98, 56, 78, 12, 546 }
  { 47, 23, 889, 24, 899, 23, 657 }
  { 12, 34, 68, 343, 878, 235, 768 }
  { 26, 78, 2365, 78, 34, 256, 873 }



------解决方案--------------------
根据楼主的代码自己写了下

import java.util.*;

public class xuanzhe {

public static void main(String[] args) {

Map<String,int[]> m = new HashMap<String,int[]>();
int array[][] = new int[][] { { 12, 34, 68, 32, 9, 12, 545 },
{ 34, 72, 82, 57, 56, 0, 213 },
{ 12, 34, 68, 32, 21, 945, 23 },
{ 91, 10, 3, 2354, 73, 34, 18 },
{ 12, 83, 189, 26, 27, 98, 33 },
{ 47, 23, 889, 24, 899, 23, 657 },
{ 12, 34, 68, 343, 878, 235, 768 },
{ 12, 34, 98, 56, 78, 12, 546 },
{ 26, 78, 2365, 78, 34, 256, 873 } };
int[] a = new int[array.length];
for (int n = 0; n < array.length; n++) {
a[n] = array[n][array[n].length - 1];
m.put(a[n]+"", array[n]);
}
xuanzheSort(a,m);
}

public static void xuanzheSort(int[] a,Map<String,int[]> m) {

for (int i = 0; i < a.length; i++) {
int temp = a[i];
for (int j = i + 1; j < a.length; j++) {
int swap = a[j];
if (temp > a[j]) {
a[i] = swap;
a[j] = temp;
temp = swap;
}
}
int[] d=m.get(temp+"");
for(int k=0;k<d.length;k++){
System.out.print(d[k]+" ");

}
System.out.println();
}
}
}

结果自己发现了问题啊
输出数组时为[I@de6ced
想了一下感觉没什么办法能直接输出数组的 所以只能for循环了
看了楼主的代码也是for写的 不知道有什么办法能直接搞出数组
代码楼主可以参考下
------解决方案--------------------
Java code
//= =    public static void main(String[] args) {        int array[][] = new int[][]{            {12, 34, 68, 32, 9, 12, 545},            {34, 72, 82, 57, 56, 0, 213},            {12, 34, 68, 32, 21, 945, 23},            {91, 10, 3, 2354, 73, 34, 18},            {12, 83, 189, 26, 27, 98, 33},            {47, 23, 889, 24, 899, 23, 657},            {12, 34, 68, 343, 878, 235, 768},            {12, 34, 98, 56, 78, 12, 546},            {26, 78, 2365, 78, 34, 256, 873}        };        sortIntArrays(array, 6, true);        for (int i = 0; i < array.length; i++) {            for (int j = 0; j < array[0].length; j++) {                System.out.print(array[i][j] + "\t");            }            System.out.println();        }    }    public static void sortIntArrays(int[][] array, final int sortCols, final boolean sortord) {         java.util.Arrays.sort(array,new java.util.Comparator() {            @Override            public int compare(Object o1, Object o2) {                //长度没sortCols长的排前面                if(o1==null&&o2==null)                    return 0;                if(o1==null&&o2!=null)                    return sortord?1:-1;                if(o1!=null&&o2==null)                    return sortord?-1:1;                int[]st1=(int[]) o1;                int[]st2=(int[]) o2;                if(st1.length<sortCols&&st2.length<sortCols)                    return 0;                if(st1.length<sortCols&&st2.length>=sortCols)                    return sortord?1:-1;                if(st1.length>=sortCols&&st2.length<sortCols)                    return sortord?-1:1;                //如果二个长度都足够                return sortord?st1[sortCols]-st2[sortCols]:st2[sortCols]-st1[sortCols];            }        });    }
  相关解决方案