【发布时间】:2017-01-06 13:07:22
【问题描述】:
我正在尝试在 Java 中实现一些排序算法,将 int-arrays 作为一个教育过程。我目前试图围绕合并排序。昨天我走了很远,结果数组大小正确,但只包含零。今天我从头开始,现在我被困在同一点上。 ^^ 这是我的代码:
public static int[] mergeSort(int[] array) {
if (array.length < 2) {
return array;
}
int left = 0;
int right = array.length;
int p = array.length / 2;
int[] lArray = Arrays.copyOfRange(array, left, p);
int[] rArray = Arrays.copyOfRange(array, p, right);
lArray = mergeSort(lArray);
rArray = mergeSort(rArray);
return merge(lArray, rArray);
}
private static int[] merge(int[] lArray, int[] rArray) {
int[] result = new int[lArray.length + rArray.length];
int idx = 0;
int rIdx = 0;
int lIdx = 0;
while (lIdx < lArray.length - 1 && rIdx < rArray.length - 1) {
if (lArray[lIdx] < rArray[rIdx]) {
result[idx] = lArray[lIdx];
lIdx++;
} else if (lArray[lIdx] >= rArray[rIdx]) {
result[idx] = rArray[rIdx];
rIdx++;
}
idx++;
}
if (lIdx < (lArray.length - 1)) {
result[idx] = lArray[lIdx + 1];
} else if (rIdx < (rArray.length - 1)) {
result[idx] = rArray[rIdx + 1];
}
return result;
}
我认为它的风格和可读性都很好。所以,你所有的算法和 Java 破解在那里,我错过了什么?调试指向合并方法,但我不能完全确定,所以我按原样发布。
提前致谢!
【问题讨论】:
-
您是否只是尝试使用一个短数组逐步调试此操作以查找零的来源?调试器是你最好的朋友
-
你不能考虑使用变量名像
lIdx、rIdx、p这样可读的东西 -
我一直在尝试完全按照您的建议进行调试 - 正如我所说,我看到提示我在合并方法错误,但我不确定具体在哪里。哦,你对一个变量名 p 是正确的。我坚持使用教授提供的伪代码,却忘了对此发表评论。然而,我发现过长的语句比明显的缩写更影响可读性。 :)
标签: java algorithm sorting mergesort