我有数字序列(未排序,无重复),目标是对它们进行排序。
方法一:插入向量。 O(n),使用排序算法并排序。 O(nlogn)
方法2:插入集合。 o(nlogn)
哪种方法会更快?
我觉得设置会更快,因为向量中的每个插入都必须分配
完整的数组元素并复制它然后删除它,这可能会很昂贵。但我在网上读到大部分地方矢量都已经设置完毕。
谁能用正确的逻辑建议我哪一个更快?
编辑:
如果我们事先不知道元素的编号,则集合或向量中哪一个会更快
(因为元素数量都小,元素数量都大?
注意:如果没有大元素,那么设置似乎是更好的选择,但它也适合小元素吗?不知道)
-
如果您提前知道许多预期要素, 你可以reserve() http://en.cppreference.com/w/cpp/container/vector/reserve向量中的空间以避免重新分配,使第一个选择非常有趣(快速插入,单一排序)。
如果您需要执行一次,请选择std::vector<>
。如果程序稍后会发生其他插入,std::set<>
可能更有趣。
-
如果您事先不知道预期尺寸,那么向量可能会发生重新分配,并且std::set<>
是一个不错的选择(更好的理论平均复杂度)。
向量的 O(n) + O(n * log(n))vs该集合的 O(n * log(n))
-
如果元素数量非常少,您仍然可以保留一些空间(例如,如果您期望 10 个元素,则可以保留 100 个以确保安全),然后使用std::vector
无论如何,分析这两种解决方案始终是一个很好的实践,实际结果将取决于(除其他外)输入的初始排序状态以及每个容器的实现质量。
Note:
- 请记住
std::set
有更大的内存占用,如果这对你很重要的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)