Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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-ArrayList-Merge排序_Java_Sorting - Fatal编程技术网

java-ArrayList-Merge排序

java-ArrayList-Merge排序,java,sorting,Java,Sorting,当我运行此命令时,合并排序没有发生,我无法找出问题所在。int-brelem和SortThread任务参数之所以存在,只是因为我需要它们正确地重写父类的方法,以便它们在本例中不起任何作用 class MergeSort extends Sort { @Override ArrayList sort(ArrayList<Integer> a, int brelem, SortThread task) { if (a.size() > 1) { Arra

当我运行此命令时,合并排序没有发生,我无法找出问题所在。int-brelem和SortThread任务参数之所以存在,只是因为我需要它们正确地重写父类的方法,以便它们在本例中不起任何作用

class MergeSort extends Sort {

@Override
ArrayList sort(ArrayList<Integer> a, int brelem, SortThread task) {
    if (a.size() > 1) {

        ArrayList<Integer> firstHalf = new ArrayList<>(a.subList(0, a.size() / 2));

        firstHalf.subList(0, a.size() / 2);
        firstHalf=sort(firstHalf, a.size() / 2, task);

        ArrayList<Integer> secondHalf = new ArrayList<>(a.subList(a.size()/2, a.size()));

        secondHalf=sort(secondHalf, secondHalf.size(), task);

        ArrayList<Integer> temp = merge(firstHalf, secondHalf);
        a.subList(0, temp.size());
    }
    return a;
}

private static ArrayList merge(ArrayList<Integer> list1, ArrayList<Integer> list2) {
    ArrayList<Integer> temp = new ArrayList<>();

    int current1 = 0;
    int current2 = 0;
    int current3 = 0;

    while (current1 < list1.size() && current2 < list2.size()) {
        if (list1.get(current1) < list2.get(current2)) {
            temp.set((current3++), list1.get(current1++));
        } else {
            temp.set((current3++), list2.get(current2++));
        }
    }

    while (current1 < list1.size()) {
        temp.set((current3++), list1.get(current1++));
    }

    while (current2 < list2.size()) {
        temp.set((current3++), list2.get(current2++));
    }

    return temp;
}
类MergeSort扩展了排序{
@凌驾
ArrayList排序(ArrayList a、int-brelem、SortThread任务){
如果(a.size()>1){
ArrayList firstHalf=新的ArrayList(a.subList(0,a.size()/2));
子列表(0,a.size()/2);
firstHalf=排序(firstHalf,a.size()/2,task);
ArrayList secondHalf=新的ArrayList(a.subList(a.size()/2,a.size());
secondHalf=sort(secondHalf,secondHalf.size(),task);
ArrayList temp=合并(上半部分,下半部分);
a、 子列表(0,临时大小());
}
返回a;
}
私有静态ArrayList合并(ArrayList列表1、ArrayList列表2){
ArrayList temp=新的ArrayList();
int current1=0;
int current2=0;
int current3=0;
而(current1

}

除此之外,您返回的是
a
,而不是
temp
。据我所知,您从未修改过
a


也许您对
List.subList()
的作用感到困惑。它返回列表的视图,因此,无论您在
sort
的倒数第二个语句中使用它做什么,都不会产生任何效果,因为您忽略了返回值。

您是否知道实际使用mergesort的方法
Collections.sort
?@SimonAndréForsberg-我怀疑编写合并排序是一项家庭作业。这不是家庭作业,这是练习。好的,我在最后拿到了,谢谢!