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 的帮助!