簡體   English   中英

java quicksort堆棧溢出

[英]java quicksort stack overflow

我仍然是初學者,我正在嘗試編寫快速排序代碼

這是我的代碼

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]+"  ");
        }
    }
}

我在遞歸調用中獲得了一個堆棧溢出異常

我不明白為什么,我會感謝任何幫助我得到^ _ ^

我沒有仔細閱讀,但在

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

你肯定在你的遞歸方法的兩個分支中計算元素A [pivot]

這個程序有很多錯誤,這里有一些我發現:

  1. 你沒有在quickSort()使用starPos
  2. 你不要在quickSort()使用length (你使用A.length quickSort()
  3. 查爾斯提到的樞紐“重疊”問題
  4. partition()你應該切換是該項目的地方right的支點和與被項小left的支點,是更大的-你不這樣做。

而且可能還有更多。 你可以看到我在Ruby中為quicksort做的一個實現(很容易將它遷移到Java)並與你的實現進行比較,直到你做對了 - 這比大多數人想象的要復雜!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM