posts - 137,comments - 0,views - 40818

相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能性:相对于使用链表算法进行排序,将链表复制到数组中,对数组进行排序,再将排序后的结果复制到链表中的速度可能更快;但这也可能占用更多的内存。请使用如下方法检验上述假设。

a.创建大型vector<int>对象vi0,并使用rand( )给它提供初始值。

b.创建vector<int>对象vi和list<int>对象li,它们的长度都和初始值与vi0相同。

c.计算使用STL算法sort( )对vi进行排序所需的时间,再计算使用list的方法sort( )对li进行排序所需的时间。

d.将li重置为排序的vi0的内容,并计算执行如下操作所需的时间:将li的内容复制到vi中,对vi进行排序,并将结果复制到li中。

要计算这些操作所需的时间,可使用ctime库中的clock( )。

这种测试并非绝对可靠,因为结果取决于很多因素,如可用内存量、是否支持多处理以及数组(列表)的长度(随着要排序的元素数增加,数组相对于列表的效率将更明显)。另外,如果编译器提供了默认生成方式和发布生成方式,请使用发布生成方式。鉴于当今计算机的速度非常快,要获得有意义的结果,可能需要使用尽可能大的数组。例如,可尝试包含100000、1000000和10000000个元素。

main.cpp:

复制代码
#include <iostream>
#include <list>
#include <vector>
#include <ctime>
using namespace std;
const int SIZE = 1000000;
int main() {
  vector<int> vi0(SIZE, 0);
  srand(time(0));
  for (int i = 0; i < SIZE; ++i) {
    vi0.at(i) = rand();
  }

  vector<int> vi(vi0);
  list<int> li(SIZE, 0);
  copy(vi0.begin(), vi0.end(), li.begin());

  clock_t start = clock();
  sort(vi.begin(), vi.end());
  clock_t end = clock();
  cout << "sort vector time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;

  start = clock();
  li.sort();
  end = clock();
  cout << "sort list time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;

  copy(vi0.begin(), vi0.end(), li.begin());
  start = clock();
  copy(vi.begin(), vi.end(), li.begin());
  sort(vi.begin(), vi.end());
  copy(vi.begin(), vi.end(), li.begin());
  end = clock();
  cout << "sort copy time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;

  return 0;
}
复制代码

posted on   wshidaboss  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示