在 c++中,std::set
按排序顺序存储元素可以在 O(log n) 时间内插入元素。但是我知道的所有方法都需要线性时间:
在数组末尾插入元素并将其与前一个元素交换,直到前一个元素小于它 - 需要线性时间。
在数组上使用二进制搜索并找到要插入元素的位置:需要 O(log n) 时间,但在最坏的情况下将元素插入给定位置需要 O(n) 时间。
如果我们将排序后的数组用作堆,我们可以在 O(log n) 时间内插入一个元素,但即使在此之后数组仍然是堆,也不能保证它仍然是排序的。
我需要一种在 O(log n) 时间内将元素插入排序数组的方法,我知道这是可能的,因为std::set
可以做到,但我不知道怎么做。