试图导致“更糟糕的情况”快速排序

时间:2013-03-31 10:03:23

标签: c algorithm sorting time-complexity quicksort

我在C中实现了一个quicksort实现,我试图弄清楚需要哪些输入才能导致更糟糕的案例性能。

根据wikipedia

  

总是选择分区中的最后一个元素作为枢轴,这样会导致已经排序的列表或相同元素列表的性能不佳(n ^ 2)。

所以我尝试这样做,结果是the following code。 pivot始终是最后一个元素,输入是已排序的列表。

为了证明复杂性确实是n ^ 2,我创建了一个全局变量,我在每次迭代中递增,然后最终打印出来。

我预计程序会打印出来:

Done in 64 iterations

然而,它在28次迭代中完成了它。也许我对“复杂性”一词的理解是错误的?

2 个答案:

答案 0 :(得分:5)

在每次迭代中,列表会缩小一个元素,因为枢轴已移动且不再计算。因此,迭代总量为7 + 6 + 5 + 4 + 3 + 2 + 1 = 28。

请注意,这仍然是二次方,因为它等于n*(n-1)/2

答案 1 :(得分:1)

对于n = 8,迭代次数为28。

迭代次数等于n*(n-1)/2 = 8 * 7/2 = 28.

现在函数是 f(n)= n *(n-1)/ 2 = n 2 / 2 - n / 2

f(n)= O(n 2 / 2 - n / 2)= O((1/2)n 2 )=为O(n 2 即可。

因此,对于Quicksort来说,输入实际上是最糟糕的情况。