簡體   English   中英

Java 中的快速排序無限循環

[英]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.

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