为什么不是heapsort lg(n!)?

use*_*876 4 algorithm runtime time-complexity heapsort clrs

我正在阅读CLRS,它说的是heapsort

HEAPSORT(A):
BUILD-MAX-HEAP(A);
for (i = A.length; i >= 1; i++)
{
    exchange A[1] with A[i];
    A.heap-size = A.heap-size - 1; 
    MAX-HEAPIFY(A,1);
}
Run Code Online (Sandbox Code Playgroud)

MAX_HEAPIFY是O(lg n).这本书说它运行MAX-HEAPIFY n次,因此是O(n lg n)时候了.

但是如果堆的大小缩小了1,那么每次迭代都不应该是这样O(lg n!)吗?

会的lg 1 + lg 2 ... + lg(n-1) + lg (n) = lg(n!),对吧?

chr*_*hrk 10

实际上这是斯特林的近似值:

O( log(n!) ) = O(nlogn)