在对一个包含n个元素的无序数组进行排序时,如果需要保证在最坏情况下的时间复杂度为O(n log n),且空间复杂度为O(log n),以下哪种排序算法最适合?
答案解析
A. 快速排序的平均时间复杂度为O(n log n),但在最坏情况下(例如,数组已经有序或接近有序时)会退化为O(n^2)。虽然其空间复杂度平均为O(log n),但最坏情况下会达到O(n)。因此,不满足题干的最坏情况时间和空间复杂度要求。
B. 归并排序的时间复杂度在最好、最坏和平均情况下均为O(n log n),但其空间复杂度通常为O(n),需要额外的辅助空间来合并子数组,因此不满足题干的空间复杂度要求。
C. 堆排序在最坏情况下的时间复杂度为O(n log n),并且其空间复杂度为O(1),因为它是一种原地排序算法,不需要额外的辅助空间,可以达到O(log n)的栈空间开销。这与题目要求的O(log n)空间复杂度相符。虽然实际实现中可能存在递归的调用栈开销,但从理论和实践意义上讲,堆排序是满足要求的算法。
D. 插入排序的最坏时间复杂度为O(n^2),不满足题干的时间复杂度要求。
正确答案:C