[英]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]
這個程序有很多錯誤,這里有一些我發現:
quickSort()
使用starPos
quickSort()
使用length
(你使用A.length
quickSort()
partition()
你應該切換是該項目的地方right
的支點和與被項小left
的支點,是更大的-你不這樣做。 而且可能還有更多。 你可以看到我在Ruby中為quicksort做的一個實現(很容易將它遷移到Java)並與你的實現進行比較,直到你做對了 - 這比大多數人想象的要復雜!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.