快速排序时间和空间复杂度?

时间:2018-06-05 18:37:28

标签: algorithm quicksort

Quick是就地算法,它不使用任何辅助数组。那么为什么这个O的内存复杂度(nlog(n))?

同样地,我理解最坏的情况是时间复杂度为O(n ^ 2),但没有得到为什么平均情况时间复杂度为O(nlog(n))。基本上我不确定当我们说平均案例复杂性时我们的意思是什么?

1 个答案:

答案 0 :(得分:0)

第二点是维基百科的摘录:

当分区例程返回大小为n-1的子列表之一时,会发生最不平衡的分区。如果数据块恰好是列表中的最小或最大元素,或者在某些实现中(例如,当所有元素相等时,如上所述的Lomuto分区方案。

如果在每个分区中重复发生这种情况,则每个递归调用都会处理比前一个列表小1的列表。因此,在到达大小为1的列表之前,我们可以进行n - 1个嵌套调用。这意味着调用树是n - 1个嵌套调用的线性链。第i个调用做O(n - i)工作来做分区,{\ displaystyle \ textstyle \ sum _ {i = 0} ^ {n}(ni)= O(n ^ {2})},所以在那个案例Quicksort需要O(n²)时间。

因为您通常不知道您必须排序的确切数字,并且您不知道,您选择哪个枢轴元素,您有可能,您的pivot元素不是数组中的最小或最大数字你排序。如果你有一个 n 数组没有重复的数字,你有可能(n - 2)/ n,你没有最坏的情况。