Java 快速排序-相等检查的原因

Java 快速排序-相等检查的原因,java,algorithm,sorting,quicksort,Java,Algorithm,Sorting,Quicksort,web上关于Quicksort(Java)的许多示例与此非常接近: private void quicksort(int low, int high) { int i = low, j = high; int pivot = numbers[low + (high-low)/2]; while (i <= j) { while (numbers[i] < pivot) { i++; } while (n

web上关于Quicksort(Java)的许多示例与此非常接近:

private void quicksort(int low, int high) {
    int i = low, j = high;
    int pivot = numbers[low + (high-low)/2];

    while (i <= j) {

      while (numbers[i] < pivot) {
        i++;
      }

      while (numbers[j] > pivot) {
        j--;
      }

      if (i <= j) {
        exchange(i, j);
        i++;
        j--;
      }
    }

    if (low < j)
      quicksort(low, j);
    if (i < high)
      quicksort(i, high);
}
private void快速排序(int-low,int-high){
int i=低,j=高;
int pivot=数字[低+(高-低)/2];
而(我){
j--;
}

如果(i假设条件被替换为
i

让我们看看对于这样的阵列会发生什么:

5,4,3,2,1
while循环将以
i=2
j=2
终止,并且我们将有重叠的函数快速排序调用,这些调用将是

quicksort(0,2) and quicksort(2,4)

如果我们有这样的条件
I,你能发布一个类似于这样代码的在线源代码的链接吗?我想你是对的,与元素本身交换是毫无意义的。上面的片段实际上来自vogella博客。我明白了。它确实会重叠“2”索引,但它最终不会破坏算法,是吗?你能告诉我你会对ommit做什么更改吗?是的,如果我们有<而不是@Lucas,它肯定会破坏算法。我唯一要做的是添加交换的条件。这意味着我只会在I!=j时交换。作者省略了@Lucas,因为它不影响t他强调了正确性,避免了添加额外条件的需要。
quicksort(0,1) and quicksort(3,4)