algorithm - 如何将元素插入已排序的堆中以使其保持排序?

标签 algorithm data-structures heap

在排序堆的末尾插入一个元素需要 O(1)。但我想以这样的方式插入,使其保持排序。在 O(n) 中实现这一点并不是什么大问题。

我如何利用它已排序的优势?通过二分查找找到合适的位置需要 O(logn)。但是通过交换插入将再次是 n 阶。 如何降低时间复杂度?请帮忙。

最佳答案

这就是您通常插入堆的方式,这只是一个堆,而不是一个排序列表:

堆是分层结构。每个元素最多有 2 个子元素。要插入,只需在末尾追加,然后将其与其父元素进行比较,这可以由元素的位置确定。如果父元素更大,则将父元素与新元素交换。重复直到新元素大于其父元素,或者新元素成为第一个/顶部元素。这样,最小的元素始终是第一个元素。

此操作最多需要 O(log n) 次操作。

看完评论,你真正想要的不是经典的堆,而是使用指针或数组索引实现的排序树。搜索红黑树

关于algorithm - 如何将元素插入已排序的堆中以使其保持排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615025/

相关文章:

java - 如何计算该算法的时间复杂度

java - 有机会消除该错误吗?(超出内存限制)

c++ - 如何在 priority_queue 中存储 3 个整数?

python - heapq 推送比较如何在 2.7 和 3.x 中工作

algorithm - 如何使用埃拉托色尼筛法得到第 n 个素数?

c - 使用 C 中的队列评估前缀操作

javascript - 为什么我的 minimax 算法不阻止我的 Action ?

c++ - 仅显示链接列表的最后一个元素

python - 如何在 Python 中实现优先级队列?

c - 是否可以在不知道最终大小的情况下创建最小/最大堆?