Java 快速排序-相等检查的原因
web上关于Quicksort(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
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)