Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的合并排序代码不工作(Java)_Java_Algorithm_Mergesort - Fatal编程技术网

我的合并排序代码不工作(Java)

我的合并排序代码不工作(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

我刚刚编写了这段代码,多年来一直在尝试找出它为什么不打印排序列表。它正在运行,没有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);

}

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
上设置一个断点,然后逐步找出错误所在。作为将来的参考,“不打印任何内容并保持运行”与默认假设的“不打印任何内容[并终止]”有很大不同。