Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Arraylist疑难解答的快速排序的Java实现_Java_Sorting_Recursion_Arraylist_Quicksort - Fatal编程技术网

使用Arraylist疑难解答的快速排序的Java实现

使用Arraylist疑难解答的快速排序的Java实现,java,sorting,recursion,arraylist,quicksort,Java,Sorting,Recursion,Arraylist,Quicksort,我试图用ArrayList实现快速排序算法,但似乎无法实现。它在sort()函数中为我的递归返回调用提供了一个错误。请帮忙 这是我得到的错误:线程“main”java.lang.StackOverflowerError中出现异常 public static void main(String[] args) { List<Integer> l = new ArrayList<Integer>(); l.add(10); l.add(7); l.ad

我试图用ArrayList实现快速排序算法,但似乎无法实现。它在sort()函数中为我的递归返回调用提供了一个错误。请帮忙

这是我得到的错误:线程“main”java.lang.StackOverflowerError中出现异常

    public static void main(String[] args) {

    List<Integer> l = new ArrayList<Integer>();
    l.add(10); l.add(7); l.add(13); l.add(22); l.add(9);
    //l.get(2);


    System.out.println(sort(l));


}


public static List<Integer> sort(List<Integer> l) {

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

    int pivot = l.get(0);
    List<Integer> left = new ArrayList<Integer>();
    List<Integer> right = new ArrayList<Integer>();

    for (int i = 0; i < l.size(); i++) {
        if (l.get(i) < pivot) {
            left.add(l.get(i));
            //System.out.println(left);
        } else {
            right.add(l.get(i));
        }

    }
    return join(sort(left), sort(right), pivot);
}

public static List<Integer> join(List<Integer> left, List<Integer> right, int pivot) {

    List<Integer> l =  new ArrayList<Integer>();

    for (int i = 0; i < left.size(); i++) {
        l.add(left.get(i));
    }

    l.add(pivot);

    for (int i = l.size(); i < right.size(); i++) {
        l.add(right.get(i));
    }
    return l;
}
publicstaticvoidmain(字符串[]args){
列表l=新的ArrayList();
l、 第(10)条;第(7)条;第(13)条;第(22)条;第(9)条;
//l、 获得(2);
System.out.println(sort(l));
}
公共静态列表排序(列表l){

如果(l.size()问题可能在这里:

您选择的轴心点为:

l.get(0);
然后再次添加轴:

int i = 0; i < l.size(); i++

问题可能在这里:

您选择的轴心点为:

l.get(0);
然后再次添加轴:

int i = 0; i < l.size(); i++

问题可能在这里:

您选择的轴心点为:

l.get(0);
然后再次添加轴:

int i = 0; i < l.size(); i++

问题可能在这里:

您选择的轴心点为:

l.get(0);
然后再次添加轴:

int i = 0; i < l.size(); i++



考虑如果选择最小的元素作为轴心会发生什么。两个子列表中的一个子列表将为空,另一个子列表将包含整个原始列表,从而导致无限递归。

考虑如果选择最小的元素作为轴心会发生什么。两个子列表中的一个子列表将为空,另一个子列表将包含整个原始列表,导致无限递归。

考虑如果选择最小的元素作为轴心会发生什么。两个子列表中的一个子列表将为空,另一个子列表将包含整个原始列表,导致无限递归。

考虑如果选择最小的元素作为轴心会发生什么。两个子列表之一子列表将为空,而另一个子列表将包含整个原始列表,从而导致无限递归。

它会给您带来什么错误?@CraigOtis线程“main”中的异常java.lang.StackOverflowErrorI认为这是一个学习使用调试器的好机会!您试过调试排序方法吗?通常在实现分治搜索算法时出现堆栈溢出是一个逐个错误,您使用相同的参数重复调用
sort()
方法,通常是在您遇到错误时递归的“叶子”。它给了你们什么错误?@CraigOtis线程“main”中的异常“java.lang.StackOverflower错误我认为这是一个学习使用调试器的好机会!您试过调试排序方法吗?通常,在实现分治搜索算法时出现堆栈溢出是一个逐个错误,您使用相同的参数重复调用
sort()
方法,通常是在您遇到错误时递归的“叶子”。它给了你们什么错误?@CraigOtis线程“main”中的异常“java.lang.StackOverflower错误我认为这是一个学习使用调试器的好机会!您试过调试排序方法吗?通常,在实现分治搜索算法时出现堆栈溢出是一个逐个错误,您使用相同的参数重复调用
sort()
方法,通常是在您遇到错误时递归的“叶子”。它给了你们什么错误?@CraigOtis线程“main”中的异常“java.lang.StackOverflower错误我认为这是一个学习使用调试器的好机会!您试过调试排序方法吗?通常,在实现分治搜索算法时出现堆栈溢出是一个逐个错误,您使用相同的参数重复调用
sort()
方法,通常是在您遇到错误时递归的“叶”。或者-在指定轴时使用
l.remove(0)
,不要使用循环。(除非您不想更改提供的
列表
)我将计数器更改为1,得到[7,10]作为result@CraigOtis我认为这不是更好的解决方案,因为remove()可能有O(n)第一个元素的复杂性…@KubaSpatny-谢谢!成功了!或者-在分配轴时使用
l.remove(0)
,不要管循环。(除非您不想更改提供的
列表
)我将计数器改为1,我得到[7,10]作为一个参数result@CraigOtis我不认为这是更好的解决方案,正如remove()第一个元素可能会有O(n)复杂度。@KubaSpatny-谢谢!成功了!或者-在分配轴时使用
l.remove(0)
,不要管循环。(除非您不想更改提供的
列表
)我将计数器更改为1,我得到[7,10]作为一个result@CraigOtis我不认为这是更好的解决方案,因为remove()对于第一个元素可能会有O(n)复杂度。@KubaSpatny-谢谢!这样做了!或者-在分配枢轴时使用
l.remove(0)
,而不使用循环。(除非您不想更改提供的
列表
)我把计数器改为1,我得到[7,10]作为result@CraigOtis我不认为这是更好的解决方案,因为remove()对于第一个元素可能有O(n)复杂性。@KubaSpatny-谢谢!成功了!