森栏

根据许多因素,将列表复制到数组然后使用Quicksort实际上可能更快。之所以会更快,是因为数组的缓存性能要比链表好得多。如果列表中的节点分散在内存中,则可能是整个地方都生成高速缓存未命中。再说一次,如果数组很大,无论如何都会遇到缓存未命中的情况。Mergesort可以更好地并行化,因此如果您要这样做,可能是更好的选择。如果直接在链接列表上执行它,则速度也更快。由于这两种算法都在O(n * log n)中运行,因此要做出明智的决定,就需要在要运行它们的计算机上对它们进行性能分析。-编辑我决定检验我的假设,并编写了一个C程序,该程序测量(使用clock())对一个int链接列表进行排序所花费的时间。我尝试了一个分配有每个节点malloc()的链表和一个将节点线性排列在一个数组中的链表,因此缓存性能会更好。我将它们与内置的qsort进行了比较,后者包括将所有内容从碎片列表复制到数组,然后将结果再次复制回去。每种算法都在相同的10个数据集上运行,并对结果取平均值。结果如下:N = 1000:带有合并排序的片段列表:0.000000秒qsort数组:0.000000秒合并排序的装箱单:0.000000秒N = 100000:具有合并排序的片段列表:0.039000秒带qsort的数组:0.025000秒合并排序的装箱单:0.009000秒N = 1000000:带有合并排序的片段列表:1.162000秒带qsort的数组:0.420000秒合并排序的装箱单:0.112000秒N = 100000000:具有合并排序的片段列表:364.797000秒带qsort的数组:61.166000秒带合并排序的装箱清单:16.525000秒结论:至少在我的机器上,复制到数组中以提高缓存性能非常值得,因为在现实生活中很少有完全打包的链表。应该注意的是,我的机器有一个2.8GHz的Phenom II,但是只有0.6GHz的RAM,因此缓存非常重要。

c语言链表qsort排序,排序链表最快的算法是什么?相关推荐

  1. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  2. C语言 链表数据的排序

    C语言使用链表时,有些时候会对链表中的数据进行排序.下边介绍使用链表时可用的排序方法,冒泡排序和选择排序. 此链表排序仅对链表中的数据进行排序,如果想进行对整个结构体的排序,也就是利用数据顺序来调整节 ...

  3. c语言单链表的字母排序,链表排序——选择排序法(纯C语言版)

    /********************************* 链表的排序 *******************************************/ /* =========== ...

  4. 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定

    链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定 链表基本操作实现 c语言版本, 该程序在visual c++ 6.0上调试通过! 本人写该程序完全是为学习交流之用,还望大家多多 ...

  5. 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)

    一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...

  6. 剑指offer系列——剑指 Offer 25. 合并两个排序的链表

    ⭐️前面的话⭐️ 大家好!本篇文章将介绍关于数据结构之链表的OJ题,来自力扣:21. 合并两个有序链表 或 剑指 Offer 25. 合并两个排序的链表 题解,展示代码语言暂时为:Java语言与C语言 ...

  7. 剑指offer:面试题25. 合并两个排序的链表

    题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1-& ...

  8. 链表问题16——单链表的选择排序(python版本)

    题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...

  9. 链表问题16——单链表的选择排序

    题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...

  10. 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...

    以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...

最新文章

  1. springboot+mybatis测试时遇到java.lang.NullPointerException
  2. c# 按位与,按位或
  3. 【飞秋】使用C# 4编写动态的代码
  4. NG Ng-content(内容映射)
  5. 【引用】窗口处理技巧大全 vb(窗体控件)
  6. linux mysql多实例启动_Mysql实例Linux下启动多个mysql服务器例子
  7. smarty入门教程
  8. Nii切片->2D ndarray灰色图->PIL灰色图->PIL RGB彩色图
  9. mariadb mysql.sock_数据库缺少mysql.sock文件的解决办法
  10. 我们为什么要结婚?(特别有道理)
  11. android相机固定方向,如何正确设置Android相机方向?
  12. _iq16 c语言,[转载]【转】IQMATH使用
  13. 利用PHPExcel将数据导出到xls格式的excel文件
  14. 【Ubuntu系统配置】006Ubuntu20.04安装QQ for Linux v3.0(del文件安装卸载)
  15. C++常见排序算法——选择排序算法
  16. 嵌入式MQTT连接主要流程
  17. ICCV2019 | AutoGAN:自动搜索生成对抗网络的结构
  18. php围棋源码,腾讯围棋AI技术 PhoenixGo 正式开源,源码、模型全公开
  19. 人在低谷时,别打扰任何人!学会独处,才能翻身
  20. linux颜色吸取工具,深度商店应用QElectroTech、Krita、深度取色器、深度截图

热门文章

  1. 移位运算符 实现 二进制数的 高低位翻转(完整逻辑代码)
  2. Java多态性练习——几何图形
  3. 7070mt安装ubuntu dell_【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(超细致)...
  4. 双十一丨你负责买买买 我做你背后的那个数据人
  5. 5-10年的DBA如何独当一面?这10个建议送给你(附图书工具推荐)
  6. 当SQL Server爱上Linux:配置 SQL Server 2017 上的可用性组初体验
  7. 存储成本降低80%,“大智慧”的选择
  8. 【“互联网+”大赛华为云赛道】CloudIDE命题攻略:明确业务场景,快速开发插件
  9. 一条数据的HBase之旅,简明HBase入门教程4:集群角色
  10. ngnix 执行php 慢,【nginx】PHP有什么办法可以排查那些脚本或方法执行慢,需要优化?...