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. quickSort()中不使用starPos
  2. quickSort()中不使用length(使用A.length
  3. 查尔斯提到的支点"叠加"问题
  4. partition()中,您应该将right到枢轴的项目和较小的项目的位置切换为left到枢轴的更大的项目-您不这样做

而且可能还有更多。您可以看到我在Ruby中为快速排序所做的一个实现(将其迁移到Java很容易),并与您的实现进行比较,直到您做对为止——这比大多数人想象的要棘手!

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

我没有仔细阅读,但在中

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

在递归方法

的两个分支中,元素A[pivot]肯定计数过多

最新更新