c语言链表qsort排序,排序链表最快的算法是什么?
森栏
根据许多因素,将列表复制到数组然后使用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排序,排序链表最快的算法是什么?相关推荐
- C语言从已排序的链表中删除重复项(附完整源码)
C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...
- C语言 链表数据的排序
C语言使用链表时,有些时候会对链表中的数据进行排序.下边介绍使用链表时可用的排序方法,冒泡排序和选择排序. 此链表排序仅对链表中的数据进行排序,如果想进行对整个结构体的排序,也就是利用数据顺序来调整节 ...
- c语言单链表的字母排序,链表排序——选择排序法(纯C语言版)
/********************************* 链表的排序 *******************************************/ /* =========== ...
- 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定 链表基本操作实现 c语言版本, 该程序在visual c++ 6.0上调试通过! 本人写该程序完全是为学习交流之用,还望大家多多 ...
- 【数据结构与算法】 01 链表 (单链表、双向链表、循环链表、块状链表、头结点、链表反转与排序、约瑟夫环问题)
一.线性表 1.1 概念与特点 1.2 线性表的存储结构 1.3 常见操作 1.4 应用场景 二.链表 2.1 链表简介 2.2 单向链表(单链表) 2.21 基本概念 2.22 单链表基本操作 2. ...
- 剑指offer系列——剑指 Offer 25. 合并两个排序的链表
⭐️前面的话⭐️ 大家好!本篇文章将介绍关于数据结构之链表的OJ题,来自力扣:21. 合并两个有序链表 或 剑指 Offer 25. 合并两个排序的链表 题解,展示代码语言暂时为:Java语言与C语言 ...
- 剑指offer:面试题25. 合并两个排序的链表
题目:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1->1-& ...
- 链表问题16——单链表的选择排序(python版本)
题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...
- 链表问题16——单链表的选择排序
题目 给定一个无序单链表头节点head,实现单链表的选择排序 要求:额外空间复杂度为O(1),时间复杂度O() 思路 选择排序是从未排序的部分中找到最小值,然后放在排好序部分的尾部. 开始整个链表都是 ...
- 冒泡链表排序java_链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)...
以下排序算法的正确性都可以在LeetCode的链表排序这一题检测.本文用到的链表结构如下(排序算法都是传入链表头指针作为参数,返回排序后的头指针) struct ListNode { int val; ...
最新文章
- springboot+mybatis测试时遇到java.lang.NullPointerException
- c# 按位与,按位或
- 【飞秋】使用C# 4编写动态的代码
- NG Ng-content(内容映射)
- 【引用】窗口处理技巧大全 vb(窗体控件)
- linux mysql多实例启动_Mysql实例Linux下启动多个mysql服务器例子
- smarty入门教程
- Nii切片->2D ndarray灰色图->PIL灰色图->PIL RGB彩色图
- mariadb mysql.sock_数据库缺少mysql.sock文件的解决办法
- 我们为什么要结婚?(特别有道理)
- android相机固定方向,如何正确设置Android相机方向?
- _iq16 c语言,[转载]【转】IQMATH使用
- 利用PHPExcel将数据导出到xls格式的excel文件
- 【Ubuntu系统配置】006Ubuntu20.04安装QQ for Linux v3.0(del文件安装卸载)
- C++常见排序算法——选择排序算法
- 嵌入式MQTT连接主要流程
- ICCV2019 | AutoGAN:自动搜索生成对抗网络的结构
- php围棋源码,腾讯围棋AI技术 PhoenixGo 正式开源,源码、模型全公开
- 人在低谷时,别打扰任何人!学会独处,才能翻身
- linux颜色吸取工具,深度商店应用QElectroTech、Krita、深度取色器、深度截图
热门文章
- 移位运算符 实现 二进制数的 高低位翻转(完整逻辑代码)
- Java多态性练习——几何图形
- 7070mt安装ubuntu dell_【手把手AI项目】一、安装win10+linux-Ubuntu16.04的双系统(超细致)...
- 双十一丨你负责买买买 我做你背后的那个数据人
- 5-10年的DBA如何独当一面?这10个建议送给你(附图书工具推荐)
- 当SQL Server爱上Linux:配置 SQL Server 2017 上的可用性组初体验
- 存储成本降低80%,“大智慧”的选择
- 【“互联网+”大赛华为云赛道】CloudIDE命题攻略:明确业务场景,快速开发插件
- 一条数据的HBase之旅,简明HBase入门教程4:集群角色
- ngnix 执行php 慢,【nginx】PHP有什么办法可以排查那些脚本或方法执行慢,需要优化?...