偶遇的一道排序题

算法题,请给出下面二维数组的排序算法
int[][] Sort(int[][] input)
测试用例:
输入:
[1] [3] [2] [4] [5]
[6] [7] [9] [8] [10]
[11] [13] [12] [14] [15]
[17] [16] [18] [19] [20]
[22] [24] [23] [21] [25]
输入乱序                                                                            
 
输出:
[11] [7] [4] [2] [1]
[16] [12] [8] [5] [3]
[20] [17] [13] [9] [6]
[23] [21] [18] [14] [10]
[25] [24] [22] [19] [15]
注意输出的数字是沿对角排序, 注意处理2维数组的下标.
输入可以是hard code的常量,如果是这样,请将输入也打印到控制台.

 

网上查阅加上自己试验  下面代码实现了以上功能

import java.util.Arrays;

/**
 * @Author: cza
 * @Date: 2018/8/23 0023 15:01
 * @Description:
 */
public class sortTest {
    public static void main(String args[]) {
        //定义数组
        int[][] arr = {{11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}, {1, 2, 3, 4, 5}, {6, 9, 8, 7, 10}};
        //执行方法
        int[][] sort = Sort(arr);
        //输出
        for (int i = 0; i < sort.length; i++) {
            for (int j = 0; j < sort.length; j++) {
                System.out.print(sort[i][j]);
                System.out.print("  ");
            }
            System.out.println();
        }
    }

    public static int[][] Sort(int[][] input) {
        if (input != null) {
            //排序
            int l = input.length;
            int[][] result = new int[l][input[0].length];
            int[] arr = new int[l * input[0].length];
            int a = 0;
            for (int i = 0; i < l; i++) {
                for (int j = 0; j < input[i].length; j++) {
                    arr[a] = input[i][j];
                    a++;
                }
            }
            Arrays.sort(arr);
            a = 0;

            //放入
            for (int i = 0; i <= l * 2 - 2; i++) {
                for (int j = 0; j < l; j++) {
                    int k = i - j;
                    if (k < l && k >= 0) {
                        result[j][k] = arr[a];
                        a++;
                    }
                }
            }


            //由于上面的方向不符合,调换.(你可以先看看上面打印的也行)
            int len = l / 2;

            for (int j = 0; j < len; j++) {
                for (int i = 0; i < l; i++) {
                    int t = result[i][j];
                    result[i][j] = result[i][l - 1 - j];
                    result[i][l - j - 1] = t;
                }
            }
            return result;
        } else {
            System.out.println("数组为空");
            return null;
        }

    }
}


运行成功的时候就是编程有趣的地方吧,哈哈

 

你可能感兴趣的:(偶遇的一道排序题)