源码如下:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

public class DuoTiaoJianPaiXu {
public static void main(String[] args) {
int x = 5;
int y = 6;
int[][] arrs = getArrs(x, y);
out(arrs);
int[] cols = getAndOutCols(y);
ArrayList<List<Node>> lists = getLists(x, y);
sort(arrs, lists, cols);
int[][] ans = getAns(x, y, arrs, lists);
out(ans);
}

private static int[][] getArrs(int x, int y) {
int[][] arrs = new int[x][y];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
arrs[i][j] = (int) (Math.random() * Math.max(10, x * y));
}
}
return arrs;
}

private static void out(int[][] arrs) {
for (int[] arr : arrs) {
for (int a : arr) {
System.out.print(a + "\t");
}
System.out.println();
}
}

private static int[] getAndOutCols(int y) {
int[] cols = new int[y];
HashSet<Integer> set = new HashSet<>();
for (int i = 0; i < y; i++) {
int num = -1;
do {
num = (int) (Math.random() * y);
} while (set.contains(num));
set.add(num);
cols[i] = num;
System.out.print(cols[i] + "\t");
}
System.out.println();
return cols;
}

private static void sort(int[][] arrs, ArrayList<List<Node>> lists, int[] cols) {
for (List<Node> list : lists) {
list.sort((node1, node2) -> {
if (node1.y != node2.y) {
System.out.println("y1 =" + node1.y + " , y2 = " + node2.y);
return 0;
}
int befor = -1;
for (int col : cols) {
if (befor == -1 || arrs[node1.x][befor] == arrs[node2.x][befor]) {
befor = col;
continue;
}
return arrs[node1.x][befor] - arrs[node2.x][befor];
}
return arrs[node1.x][node1.y] - arrs[node2.x][node2.y];
});
}
}

private static int[][] getAns(int x, int y, int[][] arrs, ArrayList<List<Node>> lists) {
int[][] ans = new int[x][y];
for (int j = 0; j < y; j++) {
List<Node> list = lists.get(j);
for (int i = 0; i < x; i++) {
Node node = list.get(i);
ans[i][j] = arrs[node.x][node.y];
}
}
return ans;
}

private static ArrayList<List<Node>> getLists(int x, int y) {
ArrayList<List<Node>> lists = new ArrayList<>();
for (int j = 0; j < y; j++) {
ArrayList<Node> list = new ArrayList<>();
for (int i = 0; i < x; i++) {
list.add(new Node(i, j));
}
lists.add(list);
}
return lists;
}

private static class Node {
int x;
int y;

public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
}