java的快速排序堆栈溢出

问题描述:

我还是一个初学者,我试图写一个快速排序的代码java的快速排序堆栈溢出

这里是我的代码

package algo_quicksort; 

public class Algo_quicksort { 

    public static int partition(int[]A,int p,int r){ 
     int x=A[p]; 
     int i=p+1; 
     int temp; 
     for(int j=p+1;j<r;j++){ 
      if(A[j]<x){//if A[j] is bigger than the pivot do nothing 
       temp=A[j]; 
       A[j]=A[i]; 
       A[i]=temp; 
       i++; 
      } 
     } 
     temp=A[p]; 
     A[p]=A[i-1]; 
     A[i-1]=temp; 
     return i-1; 
    } 

    public static void quickSort(int[]A,int starPos,int length){ 
     if(length==1){ 
      return; 
     } 
     else{ 
     if(startPos<length){ 
     int pivot= partition(A,0,length); 
     quickSort(A,startPos,pivot+1); 

     quickSort(A, pivot+2,length); 

     } 
    }} 


    public static void main(String[] args) { 
     int a[]={6,5,4,3,2,1}; 
     System.out.println("A[] after quicksort is: "); 

     quickSort(a,0, a.length); 
     for(int i=0;i<a.length;i++){ 
      System.out.print(a[i]+" "); 
     } 
    } 
} 

我得到一个堆栈过流异常的递归调用

我不明白为什么我会感谢所有帮助我得到的^ _^

+1

我建议你找到最简单的情况下发生这种情况,并使用您调试器来单步执行代码,看看它在做什么以及为什么。 –

有这个计划中有许多错误,这里有几个,我发现:

  1. 你不“T使用starPosquickSort()
  2. 你不quickSort()
  3. 枢轴使用length(您使用A.length) “覆盖” 的问题查尔斯提到
  4. partition()您应该将物品right的位置切换到数据透视表,并将其中的一个数字为left的商品的位置切换到数据透视表并且更大 - 您不这样做。

并且可能还有更多。 你可以看到我在Ruby中做快速排序的一个实现(很容易将它移植到Java),并与你的实现进行比较,直到你做对了 - 它比大多数人认为的更棘手!

http://alfasin.com/playing-with-ruby/

我没仔细看过,但在

quickSort(A,0,pivot+1); 
quickSort(A, pivot,A.length-pivot); 

你肯定在数元素A [透视]在您的递归方法的两个分支