插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
insert sort with insert/erase? (So I need to sort an vector, and instead of doing things by hand i am using insert and erase.)
所以我需要对一个向量进行排序,而不是手动做事,而是使用插入和擦除。
到目前为止,我的代码是
for (int x = 0; x < arr.size(); x++) {
for (int y = x; y < arr.size(); y++)
{
if ( arr[y] < arr[x])
{
arr.insert(arr.begin()+x,arr[y]);
arr.erase(arr.begin()+y+1);
}
}
}
然而,当它运行时,我的测试用例超时并适用于其中的 3 个(测试用例是 245+ 长数整数(。我必须使用向量,并且必须使用插入排序作为设计的一部分(找到要排序的最小交换,但从这里开始削减(,我知道它的运行时很差。
我在这里做错了什么让编译器这样做?
每次调用arr.insert
或arr.erase
时,您都会得到O(n(复杂性。尝试改用std::swap (arr[x], arr[y])
。
相关文章:
- 引用一个已擦除类型(void*)的指针
- 擦除while循环中迭代的元素
- 如何编写用于多映射插入和擦除功能的 API?
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- C++ Map 会擦除该元素,但会再次插入该元素
- 有没有一种方法可以防止在STL无序映射上插入或擦除
- 在单个链表中擦除和插入线程安全吗
- 在没有c++11的情况下,擦除映射中最后插入的元素的正确方法是什么
- std::list c++是连续的,那么在序列中的任何位置插入和擦除操作都需要恒定的时间
- 标准::映射插入/擦除的并发问题
- 需要帮助擦除和插入C++
- Kdtree c++擦除和插入低性能
- 对std::deque执行迭代器在容器两端插入或擦除后会失效
- 是否可以保存std::list中新插入元素的迭代器,然后使用该迭代器安全地擦除该元素?
- 在 std::d eque 上简单的插入-擦除-插入<char>会产生奇怪的结果
- 如何在这个c++数据结构中处理快速插入-擦除操作
- "std::map with mutexes"与并行插入、查找、擦除之间是否有任何速度测试"libcds maps (Michael Hashmap and Split Order List)"?
- 插入和擦除后使用矢量迭代器时出错
- 矢量擦除和插入方法在幕后做什么
- 使用 STL::list 插入和擦除的顺序