创建向量排序副本的更快方法

时间:2018-10-08 08:06:24

标签: algorithm sorting vector

给出一个未排序的向量作为源,目标是尽快创建一个排序的副本。 有两种可能性: 1.创建一个矢量副本然后对其进行排序 2.或一个接一个地插入每个元素,以逐步建立排序的向量。

理论上哪种方法更快?

2 个答案:

答案 0 :(得分:1)

这个问题与C ++无关(除了使用“ vector”一词,其他语言也存在)。由于这听起来像是练习,所以我真的建议编写一个程序来对其进行测试:

1. write a program that builds a vector of random N integers, v1
2. copy the vector to v2, via std::copy
3. time how long it takes to use insertion-sort (option 2 above), using a loop
4. time how long std::sort(v2, v2.begin(), v2.end()) takes

您可以使用不同的计时器(旧的<ctime>标头或较新的<chrono>标头)为事物计时。有关替代方法,请参见this answer

您应该发现,对于N的小尺寸,从第3步开始的循环更快或等效于第4步-并且从几百开始,std::sort变得越来越好。欢迎来到渐近复杂性和big-o notation

答案 1 :(得分:0)

可以在以下精彩的会议上找到答案:简而言之,这取决于向量的大小。因此,彼得的评论是最好的。 CppCon 2018: Frederic Tingaud “A Little Order: Delving into the STL sorting algorithms”