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 的帮助!
我正在尝试在 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 的帮助!