Iはkが故意ナイーブな方法でアレイ(N要素とそれぞれ)をソートマージするためのアルゴリズムを実装しようとしている:ナイーブ方法
ステップ:
- 3アレイ
- と上記得られた配列は4アレイ と上記結果の配列をマージするマージ
- 第一および第二の配列をマージように
- ...と2Dアレイは6x6のになったときに私のコードを出力することができるソート単3×3の配列、4×、5×5の2次元アレイが、それのstucks K番目アレイ
とマージされるまで。
コードの複雑さが非常に悪くてコンパイルに時間がかかりすぎますか?それとも、私が気づいていないばかげた論理的なエラーがありますか?
私は自分のコードを読んでいますが、問題は "< < < ==== ??"とマークされた行だと思います。どうすればそれを正しくすることができますか?何が「合併後:」最後の行の後に示されていない。しかし、私はそれを終了するために強制されるまでプログラムがまだ実行されている
public class Merge {
// merge 2 arrays into a single sorted array
private static int[] merge(int[] arrayA, int[] arrayB) {
int n1 = arrayA.length; // number of elements in arrayA
int n2 = arrayB.length; // number of elements in arrayB
int[] mergeArray = new int[n1+n2];
int i = 0; // pointer of current index in mergeArray
int p1 = 0; // pointer of current index in arrayA
int p2 = 0; // pointer of current index in arrayB
while (p1 < n1 && p2 < n2) {
// put the lowest number the mergeArray until one of the array is done
if (arrayA[p1] < arrayB[p2]) {
mergeArray[i] = arrayA[p1];
i++;
p1++;
}
else if (arrayB[p2] < arrayA[p1]) {
mergeArray[i] = arrayB[p2];
i++;
p2++;
}
}
// if all elements of arrayA is copied to mergeArray, then copy remaining elements in arrayB to it
if (p1 >= n1) {
for (int j = p2; j < arrayB.length; j++) {
mergeArray[i] = arrayB[j];
i++;
}
}
// if all elements of arrayB is copied to mergeArray, then copy remaining elements in arrayA to it
if (p2 >= n2) {
for (int j = p1; j < arrayA.length; j++) {
mergeArray[i] = arrayA[j];
i++;
}
}
return mergeArray;
}
public static int[] naiveMerge(int[][] data) {
int k = data.length; // number of sorted array
int n = data[0].length; // number of elements in each array
int[] resultArray = new int[k*n];
int[] tempArray = Merge.merge(data[0], data[1]); // merge the first two arrays
for (int i = 2; i < k; i++) {
// then merge in the third, fourth ... k arrays
tempArray = Merge.merge(tempArray, data[i]); // <<<==== ??
resultArray = tempArray;
}
return resultArray;
}
}
プログラム
が好きこれを立ち往生。![program stuck](https://i.stack.imgur.com/vstkr.png)
コードをよくコメントして、何をしようとしているかお教えいただきありがとうございます。これをデバッグするためにこれまでに試したことと、その特定の行が問題だと思う理由についてもう少し詳しく教えてください。また、どんな具体的なエラーが出ていますか?プログラムはループしていますか?それは間違った値を返していますか? – templatetypedef
コンソール出力の画像を添付しました。基本的には、エラーや例外は報告されませんが、ちょうどこのように立ち往生します。 – Matt
私はその特定の行を指摘する理由は、デバッガを使用して各行をステップ実行するときです。 – Matt