java - java中数组列表的合并排序

标签 java arraylist mergesort

因此,对于家庭作业,我必须编写一个程序,通过使用常规数组的代码对数组列表进行合并排序,我只是想知道是否有人可以帮助我找出哪里出错了,因为我的代码抛出了大量的 NULL指针异常,我尝试修复它们,但是当我修复一个异常时,它会转到另一个......等等......

谢谢! 我的代码:

private static ArrayList<Integer> numbers= new ArrayList<Integer>();
private static ArrayList<Integer> helper;
private static int number;
public static void sort(ArrayList<Integer> myNumbers){
    for(int i=0; i<myNumbers.size();i++){
        numbers.add(myNumbers.get(i));
    }
    //numbers=myNumbers;
    number = myNumbers.size()-1;

    mergesort(0, number -1);
}
private static void mergesort(int low, int high){
    //check if low is smaller than high, if not then the array is sorted
    if(low<high){
        //get the index of the element which is in the middle
        int middle=low+(high-low)/2;
        //sort the left side of the array
        mergesort(low, middle);
        //sort the right side of the array
        mergesort(middle +1, high);
        //combine them both
        merge(low, middle, high);
    }
}
private static void merge(int low, int middle, int high){
    //copy both parts into the helper array
    for(int i=high;i>low;i++){
        helper.add((numbers.get(i)));
    }

    int i=low;
    int j=middle+1;
    int k=low;
    //copy the smallest myNumbers from either the left or right side back to the original array
    while(i<middle  && j<high){
        if(helper.get(i)< helper.get(j)){
            numbers.set(k,(helper.get(i)));
            i++;
        }
        else{
            numbers.set(k,(helper.get(j)));
            j++;
        }
        k++;
    }
    //copy the rest of the left side of the array into target array
    while(i<middle){
        numbers.set(k,helper.get(i));
        k++;
        i++;
    }
}

返回:

Exception in thread "main" java.lang.NullPointerException
at BinarySearch.merge(BinarySearch.java:61)
at BinarySearch.mergesort(BinarySearch.java:55)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.mergesort(BinarySearch.java:51)
at BinarySearch.sort(BinarySearch.java:43)
at BinarySearch.main(BinarySearch.java:25)

最佳答案

罪魁祸首是:

for(int i=high;i>low;i++){
    helper.add((numbers.get(i)));
}

使用 for(int i=high; i>=low; i--) { 代替。

关于java - java中数组列表的合并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214186/

相关文章:

java - 使用 Java 解析 XML DOM

java - ArrayList添加不增加列表

java - 删除ArrayList中每个索引的前导空格

java - 合并排序复制上半部分的其余部分

java - 将 useLegacyMergesort 实现为 true 后,Collection.sort 在 JDK 8 中无法正确排序

java - 查找两次的 "NOR"

java - 将 ArrayList<SomeClass> 转换为 ArrayList<SomeInterface>

java - 显式等待不起作用,Thread.sleep 有效

java - 为什么我的算法没有给出预期的输出?

python - 在python类中实现归并排序功能,报错