回 帖 发 新 帖 刷新版面

主题:堆排序的时间复杂度?加分!

大家 都知道堆排序算法,它的时间复杂度为nlogn。那么在其中插入一个元素的的时间复杂度为多少呢?
还有一个问题:
顺序表长度为10,在第四个元素前插入一个元素,数组需要移动多少次?

回复列表 (共2个回复)

沙发

讨论时间复杂度一般是指平均时间复杂度或最坏时间复杂度,且严格意义上还对应数据规模 n 。理论上有时也讨论最好时间复杂,但很少讨论,因为意义不大。

堆排序的时间复杂度为O(nlogn)是指平均时间复杂度,也指最坏时间复杂度,因为两者相等。

在堆中插入一个元素的平均时间复杂度和最坏时间复杂度均为O(logn).最好时间复杂度为O(1).

至于“顺序表长度为10,在第四个元素前插入一个元素,数组需要移动多少次?”,我想你指的顺序表应该是用堆实现的,而数组需要移动多少次是数组中的元素需要交换多少次。如此需要移动2次或3次。
(注意向堆中插入元素的步骤是先将该元素插入堆尾,再对堆进行调整)例如:设数组元素为1,2,3,4,5,6,7,8,9,10,则向其中插入3.5需要交换3.5和5,交换3.5和2共两次。而向其中插入0.5的话则需要交换0.5和5,0.5和2,0.5和1共三次。(在草稿纸上画画就知道了)。

板凳


堆排序显然要维护一个堆,不会和顺序表第四个元素前插入这件事扯上关系

我来回复

您尚未登录,请登录后再回复。点此登录或注册