给出一个未排序的向量作为源,目标是尽快创建一个排序的副本。 有两种可能性: 1.创建一个矢量副本然后对其进行排序 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”