我的合并排序代码不工作(Java)
我刚刚编写了这段代码,多年来一直在尝试找出它为什么不打印排序列表。它正在运行,没有bug,只是没有打印出已排序的列表。你能帮我找出哪里不对劲吗我的合并排序代码不工作(Java),java,algorithm,mergesort,Java,Algorithm,Mergesort,我刚刚编写了这段代码,多年来一直在尝试找出它为什么不打印排序列表。它正在运行,没有bug,只是没有打印出已排序的列表。你能帮我找出哪里不对劲吗 public class Merging { public static void main(String[] args) { int[] a = new int[10]; populate(a); printA(a); a = merge_sort(a); printA(a); } pu
public class Merging {
public static void main(String[] args) {
int[] a = new int[10];
populate(a);
printA(a);
a = merge_sort(a);
printA(a);
}
public static int[] merge_sort(int[] B) {
if (B.length <= 1) {
return B;
}
int midpoint = B.length / 2;
int[] left = new int[midpoint];
int[] right= new int[B.length-midpoint];
int[] result;
for (int i = 0; i < midpoint; i++) {
left[i] = B[i];
}
int x = 0;
for (int j = midpoint; j < B.length; j++) {
if (x < right.length) {
right[x] = B[j];
x++;
}
}
left = merge_sort(left);
right = merge_sort(right);
result = merge(left, right);
return result;
}
public static int[] merge(int[] left, int[] right) {
int lengthResult = left.length + right.length;
int[] result = new int[lengthResult];
int indexL = 0;
int indexR = 0;
int indexRes = 0;
while (indexL < left.length || indexR < right.length) {
if (indexL < left.length && indexR < right.length) {
if (left[indexL] <= right[indexR]) {
result[indexRes] = left[indexL];
indexL++;
indexRes++;
} else {
result[indexRes] = right[indexR];
indexR++;
indexRes++;
}
} else if (indexL < left.length) {
result[indexRes] = left[indexL];
indexL++;
indexRes++;
}
}
return result;
}
public static void printA(int[] B) {
for (int i = 0; i < B.length; i++) {
System.out.print(B[i] + " ");
}
}
public static int[] populate(int[] B) {
for (int i = 0; i < B.length; i++) {
B[i] = (int) (Math.random() * 100);
}
return B;
}
}
公共类合并{
公共静态void main(字符串[]args){
int[]a=新的int[10];
(a);
printA(a);
a=合并和排序(a);
printA(a);
}
公共静态int[]合并\排序(int[]B){
如果(B.length想象一下循环中的情况,其中indexL
但indexR
,则永远不会增加indexR,循环也永远不会终止是否打印任何内容?在方法printA()中,出于某种原因,它不会打印我放入a=merge\u sort(a)后的任何内容由于排序中的错误,几乎肯定会有无限循环。使用调试器在merge\u sort
上设置一个断点,然后逐步找出错误所在。作为将来的参考,“不打印任何内容并保持运行”与默认假设的“不打印任何内容[并终止]”有很大不同。