当我阅读CLRS书中的以下内容时,我正在刷新算法:
与插入排序类似,但与合并排序不同,堆排序就地排序:任何时候只有恒定数量的数组元素存储在输入数组之外。
这是指左和右吗?合并排序用途的右子列表征服?
如果是,我们能否以某种方式增强合并排序算法以跳过创建这些子列表?
答案 0 :(得分:1)
“将恒定数量的数组元素存储在输入数组的外部”,这表示在生成堆的过程中正在构建的树。之所以为常数,是因为将数据分为根,左堆和右堆的时间复杂度为O(1)。
答案 1 :(得分:1)
合并排序确实需要一些工作空间:
以上所有要求的工作空间都与 N 成正比,因此空间复杂度为 O(N),这比插入排序,堆排序,外壳排序和快速排序。
请注意,应用于列表的合并排序不需要 O(N)空间,而是 O(log N)空间,无论是自上而下还是递归调用实现或指向自底向上迭代实现的子列表的指针数组。但是,数据结构中已经存在额外的 O(N)空间来存储next
指针。