0

これを実行すると、マージソートが行われず、問題がどこにあるのかわかりません。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;
}

}

4

1 に答える 1

2

とりわけ、あなたはaではなくを返していtempます。私が知る限り、決して変更しないでくださいa

おそらく、あなたは何をするかについて混乱してList.subList()います。リストのビューを返すため、 の最後から 2 番目のステートメントで何を行っても、戻りsort値を無視しているため、何の効果もありません。

于 2012-12-06T20:26:27.777 に答える