“快速排序”从nlgn转换为n2的切入点是什么?

时间:2014-09-07 14:17:18

标签: algorithm sorting

我知道算法的最坏情况 - 即元素已经排序或所有元素相同但想知道算法从nlgn的复杂度移动到n2的点。

3 个答案:

答案 0 :(得分:0)

这取决于我们如何选择 pivot

一个视图说明所有元素已经排序。嗯,这不是100%正确。在这种情况下,如果我们选择第一个元素作为支点,则复杂度将变为 N ^ 2

因为我们有,

T(N) = T(N-1) + cN (N >1),如果你擅长基础数学,那么:

 T(N) = O(N^2)

如上所述,它取决于我们如何选择支点。虽然在一些教科书中,它主要选择第一个枢轴,但并未重新开始。

一种流行的方法是:三分区中位数。它选择[左],[右]和[(左+右)/ 2]的中值。

答案 1 :(得分:0)

当所选枢轴不分割阵列时,会发生最快的快速排序时间。例如,如果我们每次都选择第一个元素作为数据透镜并且数组已经排序,则数组根本不会被分割。因此复杂度为O(n ^ 2)。

为了避免这种情况,我们随机化了pivot的索引。假设枢轴将阵列分成两个大小相等的部分,我们的复杂度为O(n log n)。

有关精确分析,请参阅https://en.wikipedia.org/wiki/Quicksort

中的形式分析部分

答案 2 :(得分:0)

表现最差,

为O(n ^ 2)

以下情况

  1. 如果列表已经排序且pivot是第一个元素
  2. 如果列表按相反顺序排序,则pivot是最后一个元素。
  3. 如果列表中的所有元素都相同。在这种情况下,枢轴选择并不重要。
  4. 注意 - 如果选择枢轴作为中位数,已经排序的情况可能不是最坏的情况。