大数跨境
0
0

自己写的排序会比C#自带的排序快吗?

自己写的排序会比C#自带的排序快吗? DotNet技术匠
2025-09-02
0
导读:自己写的排序会比C#自带的排序快吗?

前言

难,不是一般的难。99% 的情况下,你写出的代码 不会比 Array.Sort() 更快。

看到这个题目,我想起了,刚毕业参加工作的那年冬天,部门里一位很牛的同事离职了,办理离职手续的那天我得知,同事去了微软,试用期6个月,试用期间的工作任务是改善冒泡排序,转正标准就是只要比现有的有所提升即可,不过同事告诉我很难。

我想想也是,优化一个成熟的函数,难度真的很大,要考虑的东西会很多。

我思索了很久写了一个排序算法,做了一下排序,测试结果如下:

No
数据量
Array.Sort()
自己写的快排
1
1 W
约 18 ms
约 32 ms
2
10 W
约 125 ms
约 195 ms
3
100 W
约 285 ms
约 420 ms

从测试结果来看,Array.Sort()  拥有压倒性的优势。

一、为什么 Array.Sort()  那么强呢?

1、混合算法策略

Array.Sort()不是简单的一种算法,而是采用了智能的混合算法决策,根据不同的数据规模自动选择最优的算法。

小数组使用插入排序,大数组使用 IntroSort 效果更佳。

2、智能基准选择术

针对大量重复数据的场景,Array.Sort() 使用了 IntroSort 算法的二路分区策略,将数组分为三部分,显著的提升了重复数据时的性能。

3、底层性能优化

JIT编译优化将关键代码直接内联,为 int、double 等基础类型设置了专门的快速通道。

二、实战测试

我写了代码,对几种算法进行了测试

测试完之后,我决定以后排序就用 Array.Sort() 了。

三、Array.Sort() 这么优秀,还有必要学排序吗?

虽说我写不过 Array.Sort() ,但是学习排序算法,了解其原理还是很有必要的,一是为了培养自己的编程思维,知道什么时候用什么算法,二是为了考试,你说呢。

有些特殊场景还是需要自定义排序的,比如:

1、稳定排序需求

// Array.Sort()是不稳定的,如果需要稳定排序
public static void StableMergeSort<T>(T[] array, IComparer<T> comparer)
{
    // 归并排序实现,保证稳定性
}

2、特殊的数据结构

// 对于链表等特殊数据结构
public static void LinkedListMergeSort<T>(LinkedList<T> list)
{
    // 专门针对链表的归并排序
}

3、外部排序

// 处理超大数据集,无法完全加载到内存
public static void ExternalMergeSort(string inputFile, string outputFile)
{
    // 外部排序实现
}

四、工作中的选择

我程序我写不出,比如Array.Sort() 更优秀的算法,遇到排序问题这个是我的默认选择,理由就是:性能强、稳定、可靠。

我觉得开发过程中,应该把时间放到更有价值的业务理解上,对我来说知道一个算法的原理就够了,公司共通开发库里已经沉淀了很多通用的算法,到时候会用就可以了。

我一直深信,C# 是聪明的程序的选择,聪明的程序员的特质就是不是什么代码都自己写,二是知道什么时候用什么就够了,你说呢https://www.

最后
如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

作者:全小鱼

出处:zhihu.com/question/472808760/answer/1941166191579227597
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!



END



方便大家交流、资源共享和共同成长
纯技术交流群,需要加入的小伙伴请扫码,并备注加群



推荐阅读




WPF 实时工业监控大屏:ModBus协议集成与无边框动态可视化方案
C#/.NET 八月技术盘点:WPF/WinForm、机器视觉与工业上位机实践
图形化操作 Windows 服务?这个开源小工具做到了
.NET 9.0 一个可复用 WPF 界面框架
手把手教会设计 WinForm 高DPI兼容程序,告别字体模糊与控件乱飞
从零搭建企业级 WinForm 框架:集成 SunnyUI控件 与 SqlSugar ORM
C# 部署 Yolov8 全攻略:OpenVINO 与 TensorRT  双引擎加速
WPF 一款通用的嵌入式测控上位机(灵活配置免重复)
C# 有什么惊艳到你的地方?
Avalonia UI 和 Electron 哪个性能高?
C# + Halcon 的模块化工业视觉通用图像处理工具(实用、高效、全场景覆盖)
开源工业级 WPF 数据大屏:基于 MVVM+ HandyControl 的实战项目
C# 的未来是 Avalonia 吗?
C# 开发桌面应用,如何做出漂亮的界面?
免费开源!基于 WPF + Scrcpy 的简洁易用 Android 投屏工具
手写 WinForm 图表控件:无依赖,支持曲线、饼图、点图和对象折线图等
企业级桌面架构如何选,MFC、WinForm 还是 WPF?一文说清
WinForm 控件自动缩放算法:简单实现自适应窗口大小
WPF 和 WinForm:.NET平台上的未来之战,谁能胜出?(投票)
干货推荐:五款功能强大的 .NET 开源工作流系统,拿来即用
全栈 .NET 低代码引擎:权限、工作流、API动态生成,开源即用
一款基于 .NET 的轻量级 ERP 进销存系统:扫码入库、订单变标签,直达发货
.NET 8 + Vue 3 的智能工厂 MES 快速开发框架:设备监控、数据大屏全覆盖
C# + OpenCvSharp 实现低成本开源单目结构光三维扫描
.NET 9 + React 基于 DDD架构的动态路由 + RBAC权限实战
基于 SunnyUI 的企业级 WinForm 快速开发框架,开箱即用!
免硬件方案!基于.NET 的摄像头扫码工具(支持回车/连续扫描)
工业级 MES 系统开发 WPF + MVVM 从入门到实战(全源码/收藏版)

C# 工业常用的控件库

C# 轻松搞定工业上位机程序开机自启

C# 工业视觉开发选择 Halcon 还是 OpenCV?

C# 上位机开发怎么学?给自动化工程师的建议

.NET 桌面应用 (WPF/WinForm) 高效自动更新解决方案

一行代码快速开发 AntdUI 风格的 WinForm 通用后台框架

WinForm + SQL Server + Modbus 实现仓库温控上位机系统开发

WinForm 开发的多功能工具:串口通信、加密解密、图像转换等功能

.NET 开源免费、功能强大的图表库 ScottPlot(WinForm/WPF 通用)

C#+ OpenCvSharp 工业视觉常用图像处理示例集(开箱即用,附源码)


觉得有收获?不妨分享让更多人受益

关注「DotNet技术匠」,共同提升技术实力


收藏
点赞
分享
在看

【声明】内容源于网络
0
0
DotNet技术匠
「DotNet技术匠」聚焦.NET核心,分享深度干货、实战技巧、最新资讯、优质资源,助你领跑技术赛道,赋能开发者成长。
内容 1715
粉丝 0
DotNet技术匠 「DotNet技术匠」聚焦.NET核心,分享深度干货、实战技巧、最新资讯、优质资源,助你领跑技术赛道,赋能开发者成长。
总阅读13
粉丝0
内容1.7k