📜  门| GATE CS Mock 2018 |第 53 题(1)

📅  最后修改于: 2023-12-03 15:42:13.147000             🧑  作者: Mango

GATE CS Mock 2018 | 第 53 题

题目描述:

下列关于堆排序(heap sort)的说法哪个是正确的?

A. 堆排序保留堆的性质并按顺序将其排序,最坏时间复杂度为 $\Omega(n)$.

B. 堆排序是一种不稳定的排序算法,最坏时间复杂度为 $\Theta(n^2)$.

C. 堆排序保留堆的性质并按顺序将其排序,最坏时间复杂度为 $\Theta(n \log n)$.

D. 堆排序是一种稳定的排序算法,最坏时间复杂度为 $\Theta(n \log n)$.

答案为 C。

堆排序

堆排序是一种基于堆数据结构的排序算法,它首先构建一个堆,然后不断地从堆中取出最大(或最小)元素,并将其放在数组的末尾,逐步形成有序的数组。

堆排序的思路如下:

  1. 将待排序数组构造成一个堆;
  2. 不断从堆中取出根节点(最大元素或最小元素),并将其放在数组的末尾;
  3. 调整堆。

因为堆可以用一维数组表示,因此堆排序的空间复杂度为 $\Theta(1)$.

时间复杂度

堆排序的时间复杂度为 $\Theta(n \log n)$,其中 n 表示待排序的元素个数。

堆排序的证明如下:

  1. 构建堆的时间复杂度为 $\Theta(n)$;
  2. 重复执行取出根节点和调整堆的过程,总共需要执行 n 次。取出根节点的时间复杂度为 $\Theta(1)$,调整堆的时间复杂度为 $\Theta(\log n)$;
  3. 因此,堆排序的时间复杂度为 $\Theta(n \log n)$。
稳定性

由于在取出最大(或最小)元素的过程中,不断地将其放在数组的末尾,因此堆排序是一种不稳定的排序算法。如果希望得到稳定的排序结果,可以使用其他的排序算法,比如归并排序。

参考资料
  • 堆排序 - 维基百科

    https://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F