堆排序的时间复杂度为 O(n log n)。堆排序的基本思想是通过构建最大堆或最小堆,然后依次提取最大值(或最小值)并调整堆结构,从而实现排序。堆排序包括两个主要步骤:
构建堆:
将无序数组调整为最大堆或最小堆。这一步的时间复杂度为O(n)。
堆调整:
每次从堆中提取最大值(或最小值)并调整堆结构,使其重新满足堆的性质。由于每次调整堆的时间复杂度为O(log n),并且需要进行n-1次调整,因此总的时间复杂度为O(n log n)。
综上所述,堆排序的总时间复杂度为O(n) + O(n log n) = O(n log n)。堆排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为O(1)。