【发布时间】:2019-06-09 16:59:20
【问题描述】:
有人问过类似的问题,但从来没有关于二维字符串数组的问题,因此在尝试了很长时间后我找不到我想要的。我正在尝试使用 BubbleSort 在 Java 中对二维字符串数组进行排序。
作为输入,我收到一个字符串的二维数组(表)和您应该排序的“列”的索引。我应该按指示列中的值对行进行排序。
您可以将第一个索引视为行索引,将第二个索引视为列索引。比如下面的Java数组和表是相互对应的:
String[][] table = {
{"a", "b"},
{"c", "d"}
};
-
0 1
+---+---+
0 | a | b |
+---+---+
1 | c | d |
+---+---+
继续这个例子,table[0][1] 将产生值“b”,因为它是第 0 行第 1 列中的项目。
重要提示:我不允许使用 Java 库中的任何排序算法,例如 Arrays.sort。
这是我迄今为止尝试过的:
class Solution {
public static void stableSort(String[][] table, int column) {
int i;
int j;
String temp = null;
for (i = 0; i < table.length - 1; i++) {
for (j = 0; j < table.length - 1 - i; j++) {
if (table[i][j].compareTo(table[i][j + 1]) > 0) {
temp = table[i][j];
table[i][j] = table[i][j + 1];
table[i][j + 1] = temp;
}
}
}
}
}
我收到一个 Index out of Bounds 错误,而且它也无法正常工作,因为测试期望 table[0][0] 中的结果不同 感谢您的帮助。
【问题讨论】:
-
只需要使用 BubbleSort 吗?
-
建议:先把你的排序写成单个数组,然后概括:你要排序的项目不再是整数,而是整行。更改比较以在适用的列之间进行比较。开关部分不应该改变!
-
您目前甚至没有使用参数
column进行比较。正如 RealSkeptic 建议的那样,从一维冒泡排序开始,然后将其转换为二维数组并使用column来获取要比较的元素。因此,您比较 单个元素(由 2 个索引引用),但您交换 整行(仅由 1 个索引引用的一维元素)。 -
没有冒泡排序会容易得多。冒泡排序的时间复杂度也很高。 1) 对字符串进行排序 2) 现在只需将其放在数组索引中。
-
@NicholasK 时间复杂度和更容易与 IMO 不匹配。冒泡排序是最容易实现和理解的排序算法之一。
标签: java arrays algorithm sorting bubble-sort