簡體   English   中英

Java中的遞歸合並排序

[英]Recursive Mergesort in Java

首先,在此先感謝您的所有答復,我們深表感謝。 現在以這篇文章為目的; 我在用Java實現合並排序時遇到麻煩。 我收到了空指針異常,但是,我無法弄清楚錯誤是什么,對我來說代碼看起來還不錯。 到目前為止,這是我所擁有的:

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;


}

...顯然,指針異常來自'mSort'方法中的'For'語句,任何能指出我的錯誤或指導我朝正確方向的東西都將不勝感激!!!

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));

一定是

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