首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何解决QuickSort代码抛出java.lang.StackOverflowError?

如何解决QuickSort代码抛出java.lang.StackOverflowError?
EN

Stack Overflow用户
提问于 2018-10-30 04:42:31
回答 1查看 0关注 0票数 0

我正在研究一些代码,这些代码修改了一个大型项目的QUICKSORT算法(如CLRS文本中所述)。

编译代码时我没有遇到任何错误。我在运行代码时收到错误,但我不确定是什么原因造成的。我知道ArrayIndexOutofBoundsException错误有很多引用,我认为它与我如何计算分区有关。有人可以帮忙吗?

我收到错误:

Exception in thread "main" java.lang.StackOverflowError
        at MoTQS2.quicksort(MoTQS2.java:34)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)
        at MoTQS2.quicksort(MoTQS2.java:36)

...

我的代码如下:

public class MoTQS{ 

    static void move(int myArray[], int a, int b){
        int temp;
        temp = myArray[a];
        myArray[a] = myArray[b];
        myArray[b] = temp;
    } //end move

    //Create the partition function
    static int partition(int myArray[], int p, int r){ 
        int median = ((p+r)/2);
        int pivot;

            if (myArray[p] > myArray[median]){
                move(myArray, p, median); 
            }else if (myArray[p] > myArray[r]){
                move(myArray, p, r);
            }else if (myArray[median] > myArray[r]){
                move(myArray, median, r);
            }
            //end if checks

            //now set proper movements
            move(myArray, median, r-1);
            //set pivot
            pivot = myArray[r-1];
            //return pivot for which to partition around
            return pivot;
    } //end partition 

    static void quicksort(int myArray[], int p, int r){ 
        if (p < r){ 
            int partition = partition(myArray, p, r); 
            quicksort(myArray, p, partition-1); 
            quicksort(myArray, partition+1, r); 
        } //end if 
    } //end quicksort

    public static void main (String[] args){
        int testarray[] = {1,2,10,9,3,4,8,7,5,6};
        //int testarray[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

        System.out.println("UNSORTED ARRAY");
        for (int i = 0; i < testarray.length; i++){
            System.out.println(testarray[i]);
        } //end for

        int p =0;
        int r = testarray.length-1;
        MoTQS mySort = new MoTQS();
        mySort.quicksort(testarray, p, r);

        System.out.println("SORTED ARRAY");
        for (int j = 0; j < testarray.length; j++){
            System.out.println(testarray[j]);
         } //end for

    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-30 14:11:53

主要错误的来源似乎是关于中位数的混淆,当前正在将中位数定义为位于索引(p + r)/ 2处的DATA,但是然后使用中位数的DATA而不是中位数的INDEX来索引数组。如果存储在数组中的数据被用作索引,则会出现各种问题。

我看到的另一个问题:

move(myArray, median, r-1); - 如果r = 0怎么办?move将尝试与-1st索引交换并崩溃。

解决这些问题应该会改进您的计划,尽管可能还有其他一些我没有注意到的问题。

注意:自该答案发布以来,问题已经改变; 这个答案不再是最新的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档