最后在排序堆中插入元素需要 O(1)。但我想以这样的方式插入它以保持排序。在 O(n)中实现这一目标并不是什么大问题。
如何利用它进行排序?通过二分查找找到合适的位置将采用 O(logn)。但是通过交换插入将再次是订单n。 如何减少时间复杂度?请帮忙。
答案 0 :(得分:1)
这就是你通常插入堆的方式,它只是一个堆而不是一个排序列表:
堆是一种层次结构。每个元素最多有2个孩子。要插入,只需在末尾附加,然后将其与其父级进行比较,这可以通过元素的位置来确定。如果父级更大,则将父级交换为新元素。重复直到新元素大于其父元素,或者新元素成为第一个/ top元素。这样,最小元素始终是第一个元素。
此操作最多需要执行O(log n)操作。
阅读完评论后,您真正想要的不是经典堆,而是使用指针或数组索引实现的排序树。搜索red black tree
。