在快速排序中,如果 split 为 5 : n-5,那么时间复杂度将是?

Unn*_*nki 1 sorting algorithm pivot analysis quicksort

当分区大小之间的比率为 5:n-5 或类似 1:19 时,您如何找到快速排序的复杂性?我不太明白在这些情况下如何计算算法的复杂性。

tem*_*def 5

一般来说,请记住以下几点:

  • 如果您将数组拆分为由每个点的某个固定比率 a:b 定义的两部分,则在 O(log n) 拆分后,子数组的大小将减小到 0。

  • 如果将数组拆分为两部分,其中一个大小是常数 k,则需要 Θ(n / k) 拆分才能使子数组大小降至 0。

现在,考虑快速排序在递归的每个级别所做的工作。在每一层,它需要做与层中元素数量成正比的工作。如果您使用第一种方法并且有类似 1/20 : 19/20 的分割,那么每层最多有 n 个元素,但只有 O(log n) 层,所以完成的总工作将是 O(n log n),这很棒。

另一方面,假设您总是完成五个元素。然后每个步骤的较大数组的大小为 n, n - 5, n - 10, n - 15, ..., 10, 5, 0。 (n 2 ) 总工作量,效率不高。

一般来说,在快速排序中尽量避免一次拆分固定数量的元素。这给了您需要担心的退化情况。