1
我有一個似乎排序給定的輸入數組,但不能完全這樣快速排序算法:在Java快速排序不排序正確
public static int partition(int[] A,int low,int high){
int pivot=A[high-1];
int i=low-1;
int temp=0;
for(int j=low;j<A.length-1;j++){
if(A[j]<pivot){
i++;
temp = A[j];
A[j]=A[i];
A[i]=temp;
}
}
temp=A[high-1];
A[high-1]=A[i+1];
A[i+1]=temp;
return i+1;
}
public static void Qsort(int[] A,int low,int high){
if(low<high){
int p=partition(A,low,high);
Qsort(A,low,p-1);
Qsort(A,p+1,high);
}
}
我打電話的方法快速排序主這樣
Qsort(arr,0,arr.length);
例如此陣列正確排序
6,5,3,7,1,2
但這一個
{6,5,3,7,1,2,4} is sorted like this {1 3 2 4 5 6 7}
,如果我的最後一個索引更改爲8,而不是4它的工作原理。這很混亂。 我認爲錯誤是輕微的,但我找不到它。
感謝您的幫助。
編輯: 正確的解決問題的方法:
public static int partition(int[] A,int low,int high){
int pivot=A[high];
int i=low;
int temp=0;
for(int j=low;j<high;j++){
if(A[j]<pivot){
temp = A[j];
A[j]=A[i];
A[i]=temp;
i++;
}
}
temp=A[high];
A[high]=A[i];
A[i]=temp;
return i;
}
,並在主調用快速排序應該是:(很重要)
Qsort(arr,0,arr.length-1);
感謝大家的幫助。
請修正代碼的縮進 - 它會使閱讀起來更容易。如果您使用更有意義的變量名稱,它也會有很大的幫助。 –
而不是你的分區方法停止在'h'而不是'A.length - 1'? –
我建議你使用你的調試器來瀏覽你的代碼,以瞭解它在做什麼。你確定'j