Java 完成MergeSort方法后,它只返回1个数字

Java 完成MergeSort方法后,它只返回1个数字,java,mergesort,Java,Mergesort,完成MergeSort方法后,它只返回几个数字。在最后一个递归中,右数组没有numbers。有一些“调试”问题,不要在意。试图用中间变量做些什么 输出示例,包含50个元素的数组: 原始阵列: 914 75 5 811 775 500 611 991 524 306 208 673 427 938 214 789 493 390 705 140 131 550 346 851 635 957 828 350 612 442 657 795 211 309 119 368 473 884 364

完成
MergeSort
方法后,它只返回几个数字。在最后一个递归中,右数组没有numbers。有一些“调试”问题,不要在意。试图用中间变量做些什么

输出示例,包含50个元素的数组:

原始阵列:

914 75 5 811 775 500 611 991 524 306 208 673 427 938 214 789 493 390 
705 140 131 550 346 851 635 957 828 350 612 442 657 795 211 309 119 
368 473 884 364 851 195 276 891 247 462 123 111 975 384 970 
输出:

914 427 75 
代码如下:

public static ArrayList<Integer> MergeSort(ArrayList<Integer> str) {
    ArrayList<Integer> left = new ArrayList<>();
    ArrayList<Integer> right = new ArrayList<>();
    if (str.size() <= 1) {
        return str;
    }

    int middle = str.size() / 2;
    System.out.println("Mid: "+ middle);

    for (int i = 0; i < middle; i++) {
        left.add(str.get(i));
    }
    for (int i = middle; i < str.size() - middle; i++) {
        right.add(str.get(i));
    }
    System.out.println("Left start!");
    left = MergeSort(left);
    print(left);
    System.out.println("Left stop!");
    System.out.println("Right start!");
    right = MergeSort(right);
    print(right);
    System.out.println("Right stop!");

    return Merge(left, right);
}

public static ArrayList<Integer> Merge(ArrayList<Integer> left, ArrayList<Integer> right) {
    ArrayList<Integer> result = new ArrayList<>();

    while (right.size() > 0 && left.size() > 0) {
        if (right.get(0) <= left.get(0)) {
            result.add(left.get(0));
            left.remove(0);
        } else {
            result.add(right.get(0));
            right.remove(0);
        }
    }

    while (left.size() > 0) {
        result.add(left.get(0));
        left.remove(0);
    }
    while (right.size() > 0) {
        result.add(right.get(0));
        right.remove(0);
    }
    return result;
}
公共静态ArrayList合并排序(ArrayList str){
ArrayList left=新的ArrayList();
ArrayList right=新的ArrayList();
if(str.size()0&&left.size()>0){
如果(正确。获取(0)0){
result.add(left.get(0));
左。移除(0);
}
while(right.size()>0){
result.add(right.get(0));
对。删除(0);
}
返回结果;
}

(虽然这会稍微违背练习的目的——这是我假定的目标,因为
List
s毕竟也有自己的目标)

我猜这个循环中的条件
for(int I=middle;I
for (int i = middle;i<str.size()-middle;i++) {
    right.add(str.get(i));
}
for (int i = middle;i<str.size();i++) {
    right.add(str.get(i));
}
List<Integer> left=str.subList(0,middle);
List<Integer> right=str.subList(middle,str.size());