ポール・ビーダーマン:
同様の質問がされていますが、決して2D文字列配列について、したがって、長い時間のために試した後、私は私が欲しかったものを見つけることができませんでした。私はバブルソートを使用してJavaでの2D文字列配列をソートするためにしようとしています。
入力として、私は文字列の2次元配列(表)と並べ替える必要があります「列」のインデックスを受け取ります。私は指示された列の値で行を並べ替える必要があります。
あなたは列インデックスとして行インデックスとして最初のインデックス、および第2の指標を見ることができます。例えば、互いにJava配列とテーブル対応する以下の:
String[][] table = {
{"a", "b"},
{"c", "d"}
};
-
0 1
+---+---+
0 | a | b |
+---+---+
1 | c | d |
+---+---+
それは行0および列1内の項目のため、この例で続けるために、テーブル[0] [1]は、値「B」をもたらします。
重要:私は、一例は、Arrays.sortのために、Javaライブラリから任意のソートアルゴリズムを使用することはできませんしています。
これは私がこれまで試したものです:
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;
}
}
}
}
}
テストは、あなたの助けのために[0] [0]のおかげで、テーブル内の別の結果を期待するように私は、境界エラーのうちのインデックスを取得し、また、それが機能していません。
ロイShahaf:
私の作業溶液:
import java.util.Arrays;
public class MySolution {
public static void stableSort(String[][] table, int column) {
String[] temp = null;
int rows = table.length;
for (int i = 0; i < rows; i++) {
for (int j = 1; j < (rows - i); j++) {
if (table[j - 1][column].compareTo(table[j][column]) > 0) {
temp = table[j - 1];
table[j - 1] = table[j];
table[j] = temp;
}
}
}
}
public static void main(String[] args) {
String[][] table = { { "c", "d" }, { "a", "b" } };
printTable(table);
stableSort(table, 1);
printTable(table);
}
private static void printTable(String[][] table) {
System.out.println("table:");
for (int i = 0; i < table.length; i++) {
System.out.println(Arrays.toString(table[i]));
}
}
}
あなたのためにいくつかの注意事項:
- (行がtable.lengthよりも理解しやすいです)意味のある名前を使用します
- バブルソートループはビットオフだった、それをオンラインで行う方法の例の多くがあります
- 述べたように、あなたは1次元配列のためにそれをすることによって開始する必要がありますし、それを「一般化」
- あなたが持っていた一つの大きな問題:列として(と比較する行のインデックスでなければなりません)Jを使用して(と列を無視して)
- もう一つの大きな問題は、唯一の要素を代入している(行の代わりに)
私はこれがあなたの役に立てば幸い!
編集:私はちょうどあなたにも(あなたの説明で最初のインデックスは、行を表し、あなたのコード内では反対が正しいことのように思える)あなたのコード内の行と列の間で切り替えて気づきました