QuickSort NullPointerException问题:Java

时间:2011-05-09 22:13:35

标签: java nullpointerexception quicksort

我的快速排序算法看起来应该都是有序的并且工作正常,但是当我尝试对随机整数列表进行排序时,我得到了一个N​​PE。究竟我做错了什么?

public ArrayList<Integer> quickSort(ArrayList<Integer> list, int l, int r){
        ArrayList<Integer> sortedList = new ArrayList<Integer>();

        while(l<r){
            int partVal = partition(list, l, r, 0);
            sortedList = quickSort(list, l, partVal-1);
            sortedList = quickSort(list, partVal+1, r);
        } 

        return sortedList;
    }

    public int partition(ArrayList<Integer> list, int l, int r, int pivot){
        int pivotVal = list.get(pivot);

        swapElements(list, pivot, r);

        int counter = l;

        for(int i = l; i < r; i++){
            int pos = list.get(i);
            if(pos <= pivotVal){
                swapElements(list, i, counter);
                counter++;
            }
        }

        swapElements(list, r, counter);

        return counter;
    }

    public void swapElements(ArrayList<Integer> list, int a, int b){
        int temp = list.get(a);
        list.replace(a, list.get(b));
        list.replace(b, temp);
    }

2 个答案:

答案 0 :(得分:0)

您正在对数组进行排序,无需返回新列表

public ArrayList<Integer> quickSort(ArrayList<Integer> list, int l, int r){
    if(r<l)return list;
    int partVal = partition(list, l, r, l);
    quickSort(list, l, partVal-1);
    quickSort(list, partVal+1, r);

    return list;
}

答案 1 :(得分:0)

让我们从这开始:

while (l < r) {
    int partVal = partition(list, l, r, 0);
    sortedList = quickSort(list, l, partVal-1);
    sortedList = quickSort(list, partVal+1, r);
} 

您期望循环如何终止? lr的值不会更改,因此条件不会变为false。

目前还不清楚你为什么要循环...重点是递归调用完成了工作。我怀疑你想在这里if。你在评论中说过,你最后得到的是NullPointerException,你应该详细说明。仔细检查您的代码,计算您期望它做什么以及它实际做了什么。