Quicksort混乱

时间:2013-02-20 16:59:02

标签: java quicksort

我正在阅读快速排序,无论我看到哪一篇文章,我都会感到更加困惑。

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有效;但是每次通过时它都不会将枢轴元素放在正确的位置。

1 个答案:

答案 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);可能>不会导致完全排序的列表。

分析this implementation

我可以看到它为什么会起作用(它会在较低的索引处用更大的元素交换枢轴),但这不是我所知道的QuickSort,它可能比所需的工作稍微多一些。