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
Java 快速排序代码总是给我StackOverflower错误_Java_Sorting_Recursion_Quicksort - Fatal编程技术网

Java 快速排序代码总是给我StackOverflower错误

Java 快速排序代码总是给我StackOverflower错误,java,sorting,recursion,quicksort,Java,Sorting,Recursion,Quicksort,我已经为快速排序编写了这段代码,但是我得到了StackOverflower错误,我找不到原因。我试图确保递归有正确的枢轴、前后值,这是我认为混乱的地方,但在这一点上我不太确定 { int intTemp = 0; int intPivotP = intPivot; int intFrontP = intFront; int intBackP = intBack; //System.out.println ("front"

我已经为快速排序编写了这段代码,但是我得到了StackOverflower错误,我找不到原因。我试图确保递归有正确的枢轴、前后值,这是我认为混乱的地方,但在这一点上我不太确定

   {
       int intTemp = 0;
       int intPivotP = intPivot;
       int intFrontP = intFront;
       int intBackP = intBack;
       //System.out.println ("front");
       while (intFront != intBack - 1 && intFront < intBack)
       {
           //System.out.println ("while");
           if (aClone [intFront] <= aClone [intPivot] && aClone [intBack] >= aClone [intPivot])
           {
               intFront = intFront + 1;
               intBack = intBack - 1;
           }

           else if (aClone [intFront] > aClone [intPivot] && aClone [intBack] >= aClone [intPivot])
           {
               intBack = intBack - 1;
           }

           else if (aClone [intFront] <= aClone [intPivot] && aClone [intBack] < aClone [intPivot])
           {
               intFront = intFront + 1;
           }

           else if (aClone [intFront] > aClone [intPivot] && aClone [intBack] < aClone [intPivot])
           {
               intTemp = aClone [intBack];
               aClone [intBack] = aClone [intFront];
               aClone [intFront] = intTemp;
           }
       }

       if (intFrontP < intBackP)
       {
           //quick ((intBackP - intFrontP) / 2 + intFrontP, intFrontP, intPivotP - 1);
           quick ((intPivotP - intFrontP) / 2 + intFrontP, intFrontP, intPivotP - 1);
           quick ((intBackP - intPivotP) / 2 + intPivotP, intPivotP, intBackP);
       }
   }
{
intTemp=0;
int intPivotP=intPivot;
int intFrontP=intFront;
int intBackP=intBack;
//System.out.println(“前”);
while(intFront!=intBack-1&&intFrontaClone[intPivot]&&aClone[intBack]>=aClone[intPivot])
{
intBack=intBack-1;
}
else if(aClone[intFront]aClone[intPivot]&&aClone[intBack]

为了澄清起见,
aClone
是一个整数数组。

它看起来像快速排序。但是如果您想知道它是否是一个正确的实现。。。。测试它。@StephenC-hm,很难测试,你如何从合并排序中分辨出来,两者都在排序……实际上,从问题块的角度来看,删除被否决的问题并不能修复被否决的问题。(那太容易了。问一个糟糕的问题,删除它,重复一次。问题块的设计是为了让你不能做那种事情。)删除的最好方法是阻止更多的反对票。如果你关心你的声誉,和/或不想让问题被阻止,最好的策略是不要问糟糕的问题。这并不难做到。您只需要阅读、理解并遵循指南。示例代码似乎不起作用。一个关键问题是,当需要在递归调用中将输入参数重新用作参数时,输入参数会被修改。枢轴需要是值而不是索引,因为交换可能会移动枢轴。比较通常是<而不是>=。该代码似乎是对霍尔分区方案的尝试。快速排序的wiki文章包括。根据Wiki伪代码重写代码。它看起来像快速排序。但是如果您想知道它是否是一个正确的实现。。。。测试它。@StephenC-hm,很难测试,你如何从合并排序中分辨出来,两者都在排序……实际上,从问题块的角度来看,删除被否决的问题并不能修复被否决的问题。(那太容易了。问一个糟糕的问题,删除它,重复一次。问题块的设计是为了让你不能做那种事情。)删除的最好方法是阻止更多的反对票。如果你关心你的声誉,和/或不想让问题被阻止,最好的策略是不要问糟糕的问题。这并不难做到。您只需要阅读、理解并遵循指南。示例代码似乎不起作用。一个关键问题是,当需要在递归调用中将输入参数重新用作参数时,输入参数会被修改。枢轴需要是值而不是索引,因为交换可能会移动枢轴。比较通常是<而不是>=。该代码似乎是对霍尔分区方案的尝试。快速排序的wiki文章包括。根据Wiki伪代码重写代码。