如何在排序数组中插入元素,以便数组保持排序?

时间:2012-12-04 13:18:14

标签: stl heap insertion stdset

在c ++中,以排序顺序存储其元素的std::set可以在O(log n)时间内插入元素。但我所知道的所有方法都需要线性时间:

在数组的末尾插入元素并将其与前一个元素交换,直到前一个元素小于它 - 需要线性时间。

在数组上使用二进制搜索并找到要插入的元素位置的位置:花费O(log n)时间,但在最坏的情况下将元素插入给定位置需要O(n)时间。

如果我们使用排序数组作为堆,我们可以在O(log n)时间内插入一个元素,但即使数组在此之后仍然是一个堆,也不能保证它仍然是有序的。

我需要一个方法在O(log n)时间内在排序数组中插入一个元素,我知道这是可能的,因为std::set可以做到,但我不知道如何。

1 个答案:

答案 0 :(得分:2)

解决方案是使用不同的数据结构。例如,std::set已使用red-black-tree实现。

通常,您不能使用普通数组执行此操作。