我有目标的数字序列(未排序,没有重复)对它们进行排序。
方法1:插入向量。O(n),使用排序算法和排序。O(登录)
方法2:插入组中。o(登录)
哪种方法会更快?
我感觉设置会更快,因为向量中的每个插入都必须分配完整的数组元素,然后将其复制然后删除,这可能会很昂贵。但是我通过网络阅读了大部分地点矢量的信息。
谁能建议我使用正确的逻辑哪个更快?
编辑:如果我们不事先知道元素号是哪个会更快设置或向量(因为这两个元素号都是smaall和d,元素号不是很大?注:如果元素号没有很大,则是更好的选择)似乎但是对小的人也有好处?(不知道)
如果您事先知道要期待的许多元素,则可以reserve()
在向量中留出空间以避免重新分配,从而使第一个选择非常有趣(快速插入,单个排序)。
如果您需要执行一次,请前往std::vector<>
。如果程序稍后会出现其他插入,则std::set<>
可能会更有趣。
如果您事先不知道期望的大小,则向量可能会发生重新分配,这std::set<>
是一个不错的选择(理论上更好的平均复杂度)。
为O(n)+ O(N *的log(n))的向量VS为O(n *的log(n))对于该组
如果元素的数量很小,您仍然可以保留一些空间(例如,如果希望有10个元素,则可以保留100个是安全的),然后继续使用 std::vector
无论如何,对这两个解决方案进行概要分析始终是一个好习惯,实际结果(除其他事项外)将取决于输入的初始排序状态以及每个容器的实现质量。
注意:
std::set
,如果您愿意的话,它具有更大的内存占用空间。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句