我正在阅读快速排序,无论我看到哪一篇文章,我都会感到更加困惑。
1)这个实现非常好http://gauss.ececs.uc.edu/Courses/C321/html/quicksort.java.html
但据我了解,每次通过后,枢轴指数都处于正确的位置。
理想情况下,我们应该做以下事情:
public static void Quicksort(int A[], int f, int l)
{
if (f >= l) return;
int pivot_index = partition(A, f, l);
Quicksort(A, f, pivot_index-1); //*** pivot_index-1
Quicksort(A, pivot_index+1, l);
}
但教程使用 Quicksort(A,f,pivot_index); 。
我有200%肯定做出更改'pivot_index-1'不会改善任何性能或降低复杂性;但只是想知道我的理解是否正确。
2)实施here有效;但是每次通过时它都不会将枢轴元素放在正确的位置。
答案 0 :(得分:2)
我见过的两个实现:
Quicksort(A, f, pivot_index-1);
是第一种情况。
Quicksort(A, f, pivot_index);
是第二种情况。
对第一个案例执行Quicksort(A, f, pivot_index);
仍然会产生一个排序列表,但会做一些额外的工作。
对第二种情况{strong>执行Quicksort(A, f, pivot_index-1);
可能>>不会导致完全排序的列表。
我可以看到它为什么会起作用(它会在较低的索引处用更大的元素交换枢轴),但这不是我所知道的QuickSort,它可能比所需的工作稍微多一些。