简体   繁体   English

Java中的递归合并排序

[英]Recursive Mergesort in Java

first and foremost, thanks in advance for any and all replies, they are greatly appreciated. 首先,在此先感谢您的所有答复,我们深表感谢。 Now to the purpose of this post; 现在以这篇文章为目的; I am having trouble implementing a merge sort in Java. 我在用Java实现合并排序时遇到麻烦。 I am getting a Null Pointer Exception, however, I can not figure out what the mistake is, to me the code looks ok. 我收到了空指针异常,但是,我无法弄清楚错误是什么,对我来说代码看起来还不错。 Here is what I have thus far: 到目前为止,这是我所拥有的:

public List mSort(List l) {

    if (l.size() <= 1)
        return l;

    List left = null;
    List right = null;
    int mid = l.size() / 2;


    for (int x = 0; x < mid; x++)
        left.add(l.get(x));
    for (int x = 0; x >= mid; x++)
        right.add(l.get(x));

    left = mSort(left);
    right = mSort(right);

    return merge(left, right);
}

public List merge(List left, List right) {

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

        }
        else if (right.size() > 0) {
            r.add(right.get(0));
            right.remove(0);
        }
    }
    return r;


}

...apparently, the pointer exception is coming from the 'For' statements in the 'mSort' methods, anything that can point out my mistake or guide me in the right direction is greatly appreciated!!! ...显然,指针异常来自'mSort'方法中的'For'语句,任何能指出我的错误或指导我朝正确方向的东西都将不胜感激!!!

left and right are null, you can't add to that!!! leftright为空,您不能添加!!!

List left = new ArrayList();
List right = new ArrayList();
for (int x = 0; x < mid; x++)
        left.add(l.get(x));
    for (int x = 0; x >= mid; x++)
        right.add(l.get(x));

must be 一定是

int x = 0;
for (; x < mid; x++)
    left.add(l.get(x));
for (; x < l.size(); x++)
    right.add(l.get(x));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM