MergeSort显示索引超出范围

时间:2015-02-05 10:18:14

标签: java sorting arraylist merge

我在Java中创建一个mergesort方法,但我似乎无法知道什么是错的。我试过.add和.set,但它似乎没有用。从我在调试器中看到的,数字是正确的。请帮帮我!

mergesort(list, 0, list.size() - 1);

private void mergesort(ArrayList<Integer> list, int l, int h) {
    if (l < h) {
        int m = (l + h) / 2;
        mergesort(list, l, m);
        mergesort(list, m + 1, h);
        merge(list, l, m, h);
    }
}

这是我的合并方法。

private void merge(ArrayList<Integer> list, int low, int middle, int high) {
    ArrayList<Integer> temp = new ArrayList<Integer>();

    int low_end = (middle - 1);
    int tmp_pos = low;
    int num_elements = (high - low + 1);

    while ((low <= low_end) && (middle <= high)) {
        if (list.get(low) <= list.get(middle)) {
            temp.add(tmp_pos++, list.get(low++));
        }
        else {
            temp.add(tmp_pos++, list.get(middle++));
        }
    }

    while (low <= low_end) {
        temp.add(tmp_pos++, list.get(low++));
    }

    while (middle <= high) {
        temp.add(tmp_pos++, list.get(middle++));
    }

    for (int i = 0; i < num_elements; i++) {
        list.set(high, temp.get(high));
        high--;
    }
} 

任何帮助表示感谢。

0 个答案:

没有答案