java - 在 java 中使用 BUBBLESORT 对 2D 字符串数组进行排序
问题描述
有人问过类似的问题,但从来没有关于 2D String Arrays 的问题,因此在尝试了很长时间后我找不到我想要的东西。我正在尝试使用 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] 中的结果不同 感谢您的帮助。
解决方案
public static String[][] stableSort(String[][] table, int column) {
int i=0,j=0;
String[] temp = null;
boolean swap=true;
while(swap)
for (i = 0; i < table.length - 1; i++) {
swap=false;
if(table[i][column].compareTo(table[i+1][column]) > 0){
temp = table[i];
table[i] = table[i+1];
table[i+1]=temp;
swap=true;
}
}
return table;
}
它继续应用冒泡排序,直到不再执行交换。此时,条件 while(swap) 不再满足,方法返回。在一个主要的尝试并且它有效(如果我理解你的意思):
public static void main(String[] args) {
String[][] table = {
{"z", "b", "v"},
{"s", "w", "a"},
{"r", "c", "h"}
};
table = stableSort(table,1);
for(int i = 0; i < table.length; i++){
for(int j = 0; j < table[0].length; j++){
System.out.printf("%5s ", table[i][j]);
}
System.out.println();
}
}
这输出:
z b v
r c h
s w a
推荐阅读
- java - java流如何将相同的值合并到列表中
- python - Matplotlib.pyplot 不使用 set_data 更新动态折线图
- java - 我无法阻止 null 在我的 Java 中的一维数组的输出中显示
- python - 合并特定行的列
- python - 是否可以将彩色区域更改为黑色和白色,而其他区域保持不变?
- blazor - 在 Blazor 中显示加载动画
- php - 如何在过去某一年不存在的 mysql 行上 LEFT JOIN?
- c - (int *pointer) 和 (int* pointer) 有什么区别
- functional-programming - OCaml 编译错误:语法错误:需要模块路径
- postgresql - 我如何在没有任何库的情况下使用 javascript 创建一个带有时区的日期来保存到 postgres