日期:2014-05-20  浏览次数:20782 次

关于数组排序的问题?
1.int [][]ss=new int[][]{{23,4,56},{3,12,78,9},{1,21}};
以上是定义的一个Java二维数组,现在按照从小到大的顺序排列,排序完应该变成这样:
{{1,3,4},{9,12,21,23},{56,78}}


------解决方案--------------------
不难,先把组装成一维数组,然后排序,然后赋值。
------解决方案--------------------
Java code

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Example8_4 {
    public static void main(String args[]) {
        int [][]ss=new int[][]{{23,4,56},{3,12,78,9},{1,21}};
        List<Integer> list = new ArrayList<Integer>();
        for(int i=0;i<ss.length;i++){
            for(int j=0;j<ss[i].length;j++){
                list.add(ss[i][j]);
            }
        }
        Collections.sort(list);
        System.out.println(list);
        int index = 0;
        for(int i=0;i<ss.length;i++){
            for(int j=0;j<ss[i].length;j++){
                ss[i][j] = list.get(index++);
            }
        }
        for(int i=0;i<ss.length;i++){
            System.out.print(Arrays.toString(ss[i]));
        }
    }
}

------解决方案--------------------
正解!

个人技术博客 http://www.happyalaric.com/
探讨

Java code

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Example8_4 {
public static void main(String args[]) {
i……

------解决方案--------------------
还可以通过计算1维数组和2维数组下标的换算直接排序

Java code
int [][]ss=new int[][]{{23,4,56},{3,12,78,9},{1,21}};
int count = 0, flag = 0;
while (true) {
    for (int i=0; i<ss.length; i++) {
        for (int j=0; j<ss[i].length; j++) {
            if (j+1 < ss[i].length) { //如果当前列没到达最后,则直接比较
                if (ss[i][j] > ss[i][j+1]) { //比较当前元素和下一个元素
                    int tmp = ss[i][j];
                    ss[i][j] = ss[i][j+1];
                    ss[i][j+1] = tmp;
                }
            } else if (i+1 < ss.length) {//如果当前列到达最后,则换行
                if (ss[i][j] > ss[i+1][0]) { //比较当前元素和下一个元素
                    int tmp = ss[i][j];
                    ss[i][j] = ss[i+1][0];
                    ss[i+1][0] = tmp;
                }
            }
            if (flag == 0) count++;
            else flag++;
            if (flag == count) break;
        }
    }

    flag = 1;
    count--;
    if (count == 1) break; 
}
for (int i=0; i<ss.length; i++) {
    for (int j=0; j<ss[i].length; j++) {
        System.out.printf("%d ", ss[i][j]);
    }
    System.out.println();
}