在 c++ 中,std::set
按排序顺序存储其元素可以在 O(log n) 时间内插入元素。但是我知道的所有方法都需要线性时间:
数组末尾插入元素并将其与前一个元素交换,直到前一个元素小于它需要线性时间。
在数组上使用二叉搜索并查找要插入的元素的位置:需要 O(log n) 时间,但在最坏的情况下将元素插入给定位置需要 O(n) 时间。
如果我们使用排序数组作为堆,我们可以在 O(log n) 时间内插入一个元素,但即使数组在此之后仍然是堆,也不能保证它保持排序状态。
我需要一种方法在 O(log n) 时间内将元素插入排序数组中,我知道这是可能的,因为std::set
可以做到,但我不知道怎么做。
解决方案是使用不同的数据结构。 例如,std::set
已经使用红黑树实现。
通常,不能使用纯数组执行此操作。