1

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

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

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

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

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

4

1 回答 1

2

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

一般来说,你不能用普通数组来做到这一点。

于 2012-12-04T13:21:50.393 回答