我明天有一个决赛,虽然我已经找到了解决办法,但我希望有人能够解释为什么下面显示的代码必须运行两次才能将列表从1,2,3等重新排列到3,2 ,1 ..如果我只使用sortColumn函数一次它将返回3,1,2等。
public class test1 {
public static void main(String[] args) {
// TODO Test skills with sorting algorithms
int[][] num = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int[][] newNum = sortColumn(num);
// newNum = sortColumn(newNum);
for (int row = 0; row < newNum.length; row++) {
System.out.println(" ");
for (int col = 0; col < newNum[0].length; col++) {
System.out.print(newNum[row][col]);
}
}
}
static int[][] sortColumn(int[][] num) {
int[][] colNum = num.clone();
// System.out.println(colNum.length);
// System.out.println(colNum[0].length);
int temp;
for (int row = colNum.length - 1; row > -1; row--) {
for (int col = colNum[0].length - 2; col > -1; col--) {
if (colNum[row][col] < colNum[row][(col + 1)]) {
temp = colNum[row][col];
colNum[row][col] = colNum[row][(col + 1)];
colNum[row][(col + 1)] = temp;
}
}
}
return colNum;
}
}
答案 0 :(得分:-1)
算法从数组的倒数第二个元素开始,并将其与最后一个元素进行比较,因此将2
与3
进行比较,从而交换它们,让您留下1,3,2
接下来,您将继续前进到数组的第一个元素并将其与第二个元素进行比较,因此将1
与3
进行比较,然后再将这两个元素交换,留下3,1,2。
但是,如果没有第二次拨打sortColumn
,则代码永远不会将1
和2
进行比较,因此保留原样。
第二次调用sortColumn
的问题是,如果你添加第四列(并且你添加的列越多,它就越糟)你将回到同一条船:从1,2开始, 3,4,并且调用sortColumn
两次产生4,3,1,2。从理论上讲,调用sortColumn
的时间可能比列数少一个,但是当你得到的数量超过了几列,因为您正在重新比较已经排序到正确位置的列。