说在前面的话

在使用C++的标准模板库的一些容器时,我们难免会遇到给序列排序的问题。

在学习list的时候,我们可能会了解到,algorithm::sort其实不是万能的。

当我们要给list排序的时候,我们可能会用到list::sort

今天,我们就来探讨一下,给一堆数据排序,用vector+algorithm::sort效率较高,还是用list+list::sort效率更高!

前言

那么这里博主先安利一下一些干货满满的专栏啦!

手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏https://blog.csdn.net/yu_cblog/category_11464817.html这里是STL源码剖析专栏,这个专栏将会持续更新STL各种容器的模拟实现。

STL源码剖析https://blog.csdn.net/yu_cblog/category_11983210.html?spm=1001.2014.3001.5482


两种排序的底层排序算法效率分析

algorithm::sort使用的是快速排序及其优化

list::sort使用的是归并排序(因为链式存储结构归并是常数级别的空间复杂度)

学过排序算法我们可以了解到,归并排序和快速排序的平均时间复杂度都是O(nlogn),它们两者是属于同一级别的排序算法。

现在让我们来分别测试一下VS和g++环境下的效率对比。

测试代码

//现在有n(很大)个数据需要排序,哪一种好?
//1.vector+algorithm::sort
//2.list+list::sort
//写个程序来看一下,用release跑
//vector快
//当大量数据需要访问的时候,vector的随机访问性的优势就能体现出来了
void TestOP() {
srand(time(0));
const int N = 10000000;
vector<int>v;
v.reserve(N);
list<int>lt1;
list<int>lt2;
for (int i = 0; i < N; i++) {
auto e = rand();
v.push_back(e);
lt2.push_back(e);
}
//拷贝到vector排序,排完之后再拷贝回来
int begin1 = clock();
sort(v.begin(), v.end());
int end1 = clock(); int begin2 = clock();
lt2.sort();
int end2 = clock(); cout << "vectorSort" << " " << end1 - begin1 << endl;
cout << "listSort" << " " << end2 - begin2 << endl;
}
int main() {
TestOP();
return 0;
}

测试结果

VS环境下:

g++环境下结果:

结果:

很明显,用vector的效率是更高的。

这是为什么呢?

我们都知道,vector底层是顺序表,也就是数组。数组是具有随机访问性的,这是链表所不具备的。因此,当我们有大量的数据需要访问和操作时,vector的优势就体现出来了!

其实,list::sort基本上时很少用的。

尾声

如果你们感觉这篇文章对你们有帮助的话,不要忘记一键三连噢!你们的支持是我最大的动力!

更多文章请访问我的主页

@背包https://blog.csdn.net/Yu_Cblog?spm=1000.2115.3001.5343

【STL源码剖析】list::sort真的好用吗?Centos7-Linux环境g++Release下vector数组排序和list排序效率测试【超详细的注释和解释】的更多相关文章

  1. 《STL源码剖析》Sort排序分析

    整体而言: sort算法在数据量大时采用Quick Sort(快速排序),一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负担,就改用Insertion Sort(插 ...

  2. 《STL源码剖析》环境配置

    首先,去侯捷网站下载相关文档:http://jjhou.boolan.com/jjwbooks-tass.htm. 这本书采用的是Cygnus C++ 2.91 for windows.下载地址:ht ...

  3. STL"源码"剖析-重点知识总结

    STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略多 :) 1.STL概述 STL提供六大组件,彼此可以组合 ...

  4. 【转载】STL"源码"剖析-重点知识总结

    原文:STL"源码"剖析-重点知识总结 STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点 ...

  5. STL"源码"剖析

    STL"源码"剖析-重点知识总结   STL是C++重要的组件之一,大学时看过<STL源码剖析>这本书,这几天复习了一下,总结出以下LZ认为比较重要的知识点,内容有点略 ...

  6. 《STL源码剖析》相关面试题总结

    原文链接:http://www.cnblogs.com/raichen/p/5817158.html 一.STL简介 STL提供六大组件,彼此可以组合套用: 容器容器就是各种数据结构,我就不多说,看看 ...

  7. STL源码剖析之空间配置器

    本文大致对STL中的空间配置器进行一个简单的讲解,由于只是一篇博客类型的文章,无法将源码表现到面面俱到,所以真正感兴趣的码农们可以从源码中或者<STL源码剖析>仔细了解一下. 1,为什么S ...

  8. STL源码剖析之组件

    本篇文章开始,进行STL源码剖析的一些知识点,后续系列笔记全是参照<STL源码剖析>进行学习记录的 STL在现在的大部分项目中,实用性已经没有Boost库好了,毕竟STL中仅仅提供了一些容 ...

  9. 面试题总结(三)、《STL源码剖析》相关面试题总结

    声明:本文主要探讨与STL实现相关的面试题,主要参考侯捷的<STL源码剖析>,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助 ...

  10. 0《STL源码剖析》简介

    STL源码剖析 ----侯捷 STL主要包括六个组件: 1.配置器:负责空间配置和管理. 2.迭代器:扮演容器和算法之前的胶合剂,所谓“泛型指针”. 3.容器:各种数据结构,如vector,list, ...

随机推荐

  1. 2019CCPC-江西省赛(重现赛)队伍题解

    2019CCPC江西省赛(重现赛) 第一次组队(和队内dalao:hzf)参加比赛,这次比赛使用的是我的笔电,但因为我来的比较晚,没有提前磨合:比如我的64键位键盘导致hzf突然上手不习惯. Solv ...

  2. 【营】在开局,提升【豹】发力 - vivo活动插件管理平台

    一.背景 随着vivo悟空活动中台活动组件越来越多,活动中台开发的小伙伴们愈发的感知到我们缺少一个可以沉淀通用能力,提升代码复用性的组件库.在这个目标基础之上诞生了acitivity-componen ...

  3. Java23种设计模式学习笔记

    创建型模式:关注对象的创建过程 1.单例​模式: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高, ...

  4. Linux 文件目录配置及命令总结

    前言 在Linux中,一切皆文件,而每一个文件和目录都是从根目录开始的 Linux文件目录的作用 /bin目录:用来存放二进制可执行命令的目录,用户常用的命令都存在该目录下. /sbin目录:用来存放 ...

  5. centos7使用nginx+uwsgi部署python django项目

    在django框架中,我们一般直接通过python manage.py runserver来启动提供服务,但是如果生产环境此方法不可行,而且容易导致异常退出,于是需要借助uwsgi来作为守护进程. 操 ...

  6. Data truncated for column '字段名' at row 1 的解决方法

    1.原因: 修改表结构 XXX 为 not null 时,表数据  XXX 字 段 存在 null 值. 2.解决: 去掉或修改 带有 null 值 的 ( 需要设置 not null 的) 字段

  7. [转帖]043、TiDB特性_缓存表和分区表

    针对于优化器在索引存在时依然使⽤全表扫描的情况下,使⽤缓存表和分区表是提升查询性能的有效⼿段. 缓存表 缓存表是将表的内容完全缓存到 TiDB Server 的内存中 表的数据量不⼤,⼏乎不更改 读取 ...

  8. [转帖]SQL Server超过了每行的最大字节数(8060)的原因和解决办法

    一.现象     出现这种错误都发生在SQL语句建表时,错误提示: "警告: 已创建表 'XXXX,但其最大行大小(10438)超过了每行的最大字节数(8060).如果结果行长度超过 806 ...

  9. [转帖]xsos - Summarize system info from sosreports

    https://github.com/ryran/rsar I'M LOOKING FOR RSAR SCREEN SHOTS INTRO INSTALLATION EXAMPLES IN ACTIO ...

  10. [转帖]PowerShell教程 - 日期时间管理(Date & Time Management)

    https://www.cnblogs.com/cqpanda/p/16589991.html 更新记录转载请注明出处.2022年8月25日 发布.2022年8月18日 从笔记迁移到博客. 日期时间管 ...