我想看过那个帖子的人应该都还记得吧?原命题是:
/*
矩阵A
68 36 22
59 77 39
81 20 17
将矩阵A每列排序之后(升序排列)应该得到的矩阵是:
矩阵B:
59 20 17
68 36 22
81 77 39
这样矩阵A中每个元素在矩阵B中对应的位置就是
矩阵C:
2 3 3
1 1 1
3 2 2
问:由矩阵A得到矩阵C的算法?
*/
在自己的blog里(详见"关于返回二维数组排序后序号数组的问题求解"),将这个问题扩展到了不规则数组中,也就是说算法应该能解决如下问题:
/*
矩阵A
68 36 22
59 77
81
将矩阵A每列排序之后(升序排列)应该得到的矩阵是:
矩阵B:
59 36 22
68 77
81
这样矩阵A中每个元素在矩阵B中对应的位置就是
矩阵C:
2 1 1
1 2 2
3
问:由矩阵A得到矩阵C的算法?
*/
不知道各位能不能提供更好地解法。大冬天的,大家热烈讨论吧!关于blog的一些错误,也欢迎指正!
/*
矩阵A
68 36 22
59 77 39
81 20 17
将矩阵A每列排序之后(升序排列)应该得到的矩阵是:
矩阵B:
59 20 17
68 36 22
81 77 39
这样矩阵A中每个元素在矩阵B中对应的位置就是
矩阵C:
2 3 3
1 1 1
3 2 2
问:由矩阵A得到矩阵C的算法?
*/
在自己的blog里(详见"关于返回二维数组排序后序号数组的问题求解"),将这个问题扩展到了不规则数组中,也就是说算法应该能解决如下问题:
/*
矩阵A
68 36 22
59 77
81
将矩阵A每列排序之后(升序排列)应该得到的矩阵是:
矩阵B:
59 36 22
68 77
81
这样矩阵A中每个元素在矩阵B中对应的位置就是
矩阵C:
2 1 1
1 2 2
3
问:由矩阵A得到矩阵C的算法?
*/
不知道各位能不能提供更好地解法。大冬天的,大家热烈讨论吧!关于blog的一些错误,也欢迎指正!
抛砖引玉, 我是菜鸟,大侠莫怪~~~
int[][] aa = { { 68, 36, 22 }, { 59, 77, 39 }, { 81, 20, 17 } };
int[][] po = { { 1, 1, 1 }, { 2, 2, 2 }, { 3, 3, 3 } };; int temp;
for (int i = 0; i < aa.length; i++) {
for (int j = aa.length - 1; j > 0; j--) {
for (int k = 0; k < j; k++) {
if (aa[k][i] > aa[k + 1][i]) {
temp = aa[k][i];
aa[k][i] = aa[k + 1][i];
aa[k + 1][i] = temp;
temp = po[k][i];
po[k][i] = po[k + 1][i];
po[k + 1][i] = temp;
}
}
} }
}
private static void method1() {
int[][] aa = { { 68, 36, 22 }, { 59, 77, 39 }, { 81, 20, 17 } };
int[][] po = new int[aa.length][aa[0].length]; // 给index数组赋初始值
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
po[i][j] = i + 1;
}
} int temp;
for (int i = 0; i < aa.length; i++) {
for (int j = aa.length - 1; j > 0; j--) {
for (int k = 0; k < j; k++) {
if (aa[k][i] > aa[k + 1][i]) {
temp = aa[k][i];
aa[k][i] = aa[k + 1][i];
aa[k + 1][i] = temp; temp = po[k][i];
po[k][i] = po[k + 1][i];
po[k + 1][i] = temp;
}
}
}
}
}