[英]Quicksort infinite loop in Java
我正在嘗試在 Java 中實現快速排序算法。以下代碼與我的大學教授提供的代碼相同。 它工作得很好,直到我將 Object[] {1,2,3,14,24,5,454,1,24,2,11}(顯然左 = 0 和右 = 10)設置為輸入。 該算法似乎陷入了無限循環,但我找不到位置或原因。 我已經研究了幾天了,但找不到錯誤。 我在網站上研究了其他與快速排序算法類似的問題,但它們對解決我的問題沒有幫助。 我會很感激任何想法。
static int partition (Object[] a, int left, int right, Comparator c){
Object pivot = a[left];
int i = left+1;
int j = right;
while (i<=j){
while(i<=j && c.less(a[i],pivot)){i++;}
while(c.less(pivot, a[j])){j--;}
if (i<j){
Object temp = a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}
}
a[left] = a[j];
a[j] = pivot;
return j;
}
static void quickSort(Object[] a, int left, int right){
if(left<right){
int p = partition(a,left,right, new Comparator());
quickSort(a,left,p-1);
quickSort(a,p+1,right);
}
}
只是為了將其標記為已接受的答案,正如 markspace 在評論中指出的那樣,無限循環發生在i == j
時。 兩個while
循環和if
語句一樣失敗,因此它們保持不變。 將主循環更改為while (i < j)
解決了這個問題。 謝謝 markspace 的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.